我有一個動態的PL/SQL,將構建基於從用戶輸入什麼搜索條件的SELECT語句,喜歡:綁定變量
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;
爲了減少硬解析的開銷,我考慮使用綁定變量。但是,在爲綁定變量提供實際值時很難管理,因爲有這麼多的綁定變量和生成的SELECT語句的組合。我無法使用在http://www.dba-oracle.com/plsql/t_plsql_dynamic_binds.htm引入的DBMS_SESSION.set_context()方法,因爲我的帳戶無權使用此包。此外,我希望生成的SQL僅包含用戶不會留空的字段的條件。所以,我不能改變的動態SQL的東西喜歡
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)
所以,我想嘗試使用DBMS_SQL方法。可以給任何人有關如何使用DBMS_SQL調用動態SQL與綁定變量的例子嗎?特別是,我怎麼能得到DBMS_SQL.execute(執行結果)的SYS_REFCURSOR,是這樣的:
open refcursor for select .... from
,我使用Oracle版本10g和它似乎是Oracle 10g中沒有DBMS_Sql.To_Refcursor ()