新文章 网摘 文章 随笔 日记

ORACLE存储过程使用execute immediate执行动态SQL

使用execute immediate

1、动态语句传值(使用using子句)

create or replace procedure p_user(para_id integer, para_name out varchar2)
is
para_sql varchar2(100);
begin
para_sql := 'select name from user where id = :1'; --冒号:为绑定变量指示符(占位符)
execute immediate para_sql into para_name using para_id; --使用using子句进行动态传参,into子句获取检索值,into子句在using子句前面
end p_test;
2、动态拼接SQL

create or replace procedure p_user(para_id integer, para_name out varchar2)
is
para_sql varchar2(100);
begin
para_sql := 'select name from user where id = '||para_id; --使用双竖线进行字符串拼接
execute immediate para_sql into para_name;
end p_test;
另外,值得注意的是ORACLE执行动态SQL ,如果使用绑定变量using传值方式,则仅能作为字段值进行传递,如果想动态传递表名或字段名,只能使用动态拼接SQL方式

create or replace procedure p_user(para_tab varchar2, para_field varchar2, para_name out varchar2)
is
para_sql varchar2(100);
begin
para_sql := 'select '||para_field||' from '||para_tab||' where id = 1'; --使用双竖线进行字符串拼接
execute immediate para_sql into para_name;
end p_test;

————————————————
版权声明:本文为CSDN博主「ZenPower」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/mypowerhere/article/details/102322568

posted @ 2022-06-22 16:07  岭南春  阅读(996)  评论(0)    收藏  举报