[英]Oracle PL/SQL dynamic SQL
我想在表中保存一些参数化的sql语句。 例如:
select * from table_xy where table_xy.col = :par1;
在Oracle
是否可以从带有名称的参数化sql语句中检测/获取参数。
因此,当我尝试解析先前的sql语句时,我想检测所有需要的参数及其名称( :par1
),以从另一个表中按名称( :par1
)选择参数的值。
我希望你明白我的意思。
您可以为此使用regexp
SELECT regexp_substr('select * from table_xy where table_xy.col = :par1;','[:][a-zA-Z0-9_]+') FROM dual;
如果有多个参数,请使用regexp_substr的3-d参数
SELECT regexp_substr('select * from table_xy where table_xy.col = :par1 and table_xy.col2 = :long_par_name2;','[:][a-zA-Z0-9_]+',1,2) FROM dual;
我大多同意@Ed Gibbs的观点。 如果您仍然坚持要这样做,则可以通过其他方法更强大地完成此操作,即,当您知道所有可能参数的完整列表时,可以进行简单的搜索和替换:
for r in (
select parameter, value
from parameter_table
)
loop
l_query := replace(l_query, ':'||r.parameter, r.value);
end loop;
请注意,这不处理带引号的字符串/不带引号的数字,因此您应以可以按原样插入查询的格式存储所有参数值。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.