动态SQL

1.动态 SQL

动态 SQL 是指在PL/SQL程序执行时生成的 SQL 语句

编译程序对动态 SQL 不做处理,而是在程序运行时动态构造语句、对语句进行语法分析并执行

DDL 语句命令和会话控制语句不能在 PL/SQL 中直接使用,但是可以通过动态 SQL 来执行

执行动态 SQL 的语法:

   EXECUTE IMMEDIATE dynamic_sql_string

   [INTO  define_variable_list]

   [USING bind_argument_list];

execute immediate 字符串参数 [into] 变量 using 参数

immediate后面跟的参数:它是一个字符串类型的sql语句,或者字符串类型的plsql代码

into 变量:是把sql语句的执行结果保存到变量中

using 参数:传给sql语句的参数

如:

--按照员工编号查询员工的信息

declare

  --声名一个变量保存员工信息

  v_emp emp%rowtype;

  --声名一个字符串类型变量

  v_sql varchar2(255);

begin

  execute immediate 'select * from emp where empno=7369' into v_emp;--字符换类型的sql语句

  dbms_output.put_line(v_emp.ename||','||v_emp.job);

  v_sql:='select * from emp where empno=7369';

  execute immediate v_sql into v_emp;

  dbms_output.put_line(v_emp.ename||','||v_emp.job);

  v_sql:='select * from emp where empno=:a and deptno=:b';

  execute immediate v_sql into v_emp using 7369,20;

  dbms_output.put_line(v_emp.ename||','||v_emp.job);

end;

declare

  --声名一个变量保存员工信息

  v_emp emp%rowtype;

  --声名一个字符串类型变量

  v_sql varchar2(255);

  --

  n number(10):=1000;

begin

 -- execute immediate 'update emp set sal=:1 where empno=:2' using n,7369 ;

  --execute immediate 'delete from emp where empno=:1' using 7369;

  execute immediate 'create table t(id number(11),name varchar2(20))';

end;

select * from emp where empno=7369;

select * from t;

eg:

查找出当前用户模式下,每张表的记录数,

以scott用户为例,结果应如下:

DEPT...................................4

EMP...................................14

BONUS.................................0

SALGRADE.............................5

DECLARE

v_n VARCHAR2(100);

v_m NUMBER;

BEGIN

   FOR i IN (SELECT * FROM user_tables) LOOP

     v_n:='select count(1) from'||i.table_name;

     EXECUTE IMMEDIATE v_n INTO v_m;

     dbms_OUTPUT.PUT_LINE(i.table_name||v_m);

   END LOOP;

END;

  • 18
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

.房东的猫

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值