繁体   English   中英

Oracle PL / SQL动态SQL

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM