2009-05-08 4 views
2

Supposons que j'ai certains types de données définis dans PL/SQL:comportement comme générique dans Procédure PL/SQL Paramètres

TYPE foo_t IS RECORD (...); 
TYPE foo_table_t IS TABLE OF foo_t INDEX BY BINARY_INTEGER; 

TYPE bar_t IS RECORD (...); 
TYPE bar_table_t IS TABLE OF bar_t INDEX BY BINARY_INTEGER; 

Est-il possible pour moi d'écrire une procédure capable d'accepter tout type de données tirées du tableau (par exemple, un foo_table_t ou un bar_table_t) en tant que paramètre? La procédure n'a pas besoin de connaître les types de lignes de la table. Un exemple trivial:

PROCEDURE remove_last(some_table ...) IS 
BEGIN 
    some_table.DELETE(some_table.LAST); 
END; 

Répondre

4

Pas directement. A partir du guide du programmeur PL/SQL:

"Le paramètre actuel et son paramètre formel correspondant doivent avoir des types de données compatibles."

PL/SQL effectue une conversion implicite de types de données de paramètres réels en des types de données de paramètres formels. Ainsi, vous pourriez passer une valeur numérique à une procédure qui veut une chaîne, et cela fonctionnerait parce que vous pouvez faire une conversion implicite.

Le mieux que vous pourriez faire serait d'écrire des procédures surchargées:

PROCEDURE générique (foo IN OUT foo_t);

PROCÉDURE générique (barre IN OUT bar_t);

Ensuite, vous pouvez appeler générique avec un type d'enregistrement. Ceci perd de son attractivité en proportion du nombre de types d'enregistrements à traiter: -D

Questions connexes