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;
 

 

你可能感兴趣的:(SQL,ORACLE,动态sql)