J'ai un PL/SQL dynamique qui construira l'instruction SELECT en fonction de ce que l'entrée des critères de recherche des utilisateurs, aime:des variables de liaison dans PL/SQL dynamique
l_sql := 'SELECT * INTO FROM TABLEA WHERE 1=1 ';
IF in_param1 IS NOT NULL THEN
l_sql := l_sql || 'AND column1 = in_param1 ';
END IF;
IF in_param2 IS NOT NULL THEN
l_sql := l_sql || 'AND column2 = in_param2 ';
END IF;
...................................
IF in_paramXX IS NOT NULL THEN
l_sql := l_sql || 'AND columnXX = in_paramXX ';
END IF;
Pour réduire les frais généraux d'analyse syntaxique dur, Je considère utiliser les variables de liaison. Cependant, il est difficile à gérer lors de la fourniture des valeurs réelles aux variables de liaison car il existe un grand nombre de variables de liaison et une combinaison de l'instruction SELECT générée. Je ne peux pas utiliser la méthode de DBMS_SESSION.set_context() présentée au http://www.dba-oracle.com/plsql/t_plsql_dynamic_binds.htm car mon compte n'a pas le droit d'utiliser ce package. De plus, je veux que le SQL généré ne contienne que les conditions sur les champs que l'utilisateur n'a pas laissés vides. Je ne peux pas changer le SQL dynamique à quelque chose aime
SELECT * INTO FROM TABLEA WHERE 1=1
and (in_param1 is NULL or column1 = in_param1)
and (in_param2 is NULL or column2 = in_param2)
...............................................
and (in_paramXX is NULL or columnXX = in_paramXX)
Alors, je veux essayer d'utiliser la méthode DBMS_SQL .Peut-on donner un exemple sur la façon d'utiliser DBMS_SQL pour appeler SQL dynamique avec des variables de liaison? Surtout, comment puis-je obtenir le résultat exécuté à partir DBMS_SQL.execute() à la SYS_REFCURSOR, quelque chose comme:
open refcursor for select .... from
La version oracle que j'utilise est 10g et il semble que l'oracle 10g ne pas DBMS_Sql.To_Refcursor()