sql - 动态 SQL 表名作为变量
问题描述
我有这个正在运行的程序,调用程序时可以传递 2 个参数并执行选择查询。
create or replace procedure dynamic_sql
(input1 varchar2, input2 varchar2)
as begin
execute immediate
'select :variable1, :variable2 from emp'
using input1,input2;
end;
/
exec dynamic_sql('ename','job');
以同样的方式,我尝试添加将替换表 Emp 的第三个变量,但它不起作用,传入的表名是 100% 正确的。这是不起作用的代码(ORA-00903:无效的表名):
create or replace procedure dynamic_sql
(input1 varchar2, input2 varchar2,input_table varchar2)
as begin
execute immediate
'select :variable1, :variable2 from :variable3'
using input1,input2,input_table;
end;
/
exec dynamic_sql('ename','job','emp');
解决方案
尝试这样的事情:这是由于在执行之前解析了表名。
create or replace procedure dynamic_sql
(input1 varchar2, input2 varchar2,input_table varchar2)
as
str varchar2(1000) := NUll;
begin
str := 'select '||input1||','|| input2 ||' from '||input_table;
execute immediate str;
end;
/
exec dynamic_sql('ename','job','emp');
Procedure created.
PL/SQL procedure successfully completed.
推荐阅读
- docker - 使用奇异性在snakemake中规则:未终止的带引号的字符串
- angular - 如何将 Aria 标签应用于 PrimeNG 组件的子元素?
- sql - 如何选择 MS ACCESS OLE 对象只有数据?
- pyarrow - 如何为 pyarrow 设置 libhdfs.so 的路径?
- python - 从单独的脚本运行 Scrapy -o JSON
- python-3.x - 在python中选择没有if语句的函数
- javascript - 将Mongodb数据存储到sails js中的变量中?
- docker-compose - 使用 traefik 和 docker-compose 进行端口转发
- java - 在 switch case 中使用字符串
- c# - 如何在 WPF 项目中使用 AppRecordingManager 启用屏幕捕获(视频)?