oracle之动态sql

1、PLSQL内部能够正常运行DML(insert、update、delete)DQL(select)语句,如果运行DDL(create、truncate、drop等)需要动态sql执行。
2、动态sql不但在PLSQL中可以运行DDL还可以运行DML、DQL
3、动态sql语法:
execute immdiate ‘sql语句’ 【into 变量】【using绑定变量】

案例1:动态sql执行DDL语句

--案例1:动态sql执行DDL语句
DECLARE
-- 将要执行的DDL语句用单引号包裹住,并赋值给一个变量,注意这个变量的长度要足够
  V_SQL VARCHAR2(200) := 'CREATE TABLE A(
  ID NUMBER PRIMARY KEY,
  NAME VARCHAR2(30) NOT NULL 
  )';
BEGIN
  EXECUTE IMMEDIATE V_SQL;
END;

查看结果:
在这里插入图片描述
表成功被创建出来。
执行truncate和drop
在这里插入图片描述

案例2:执行DML语句

--案例2:动态sql执行DML语句
BEGIN
--  EXECUTE IMMEDIATE 
--  'insert into A(id,name) values(1,''小明'')';
--  COMMIT;
  
  --:1 第一个占位参数   :2 第二个占位参数
--  EXECUTE IMMEDIATE
  -- 使用using给动态sql绑定参数
--  'INSERT INTO A(ID,NAME) VALUES(:1,:2)' USING 2,'小王';
--  COMMIT;
   EXECUTE IMMEDIATE 
   -- 只需要using后面的值和依次对应表中的字段即可,values中的占位符可以随意写
  'insert into A(name,id) values(:a,:b)' USING '小马',5;
  COMMIT;
END; 

查看表内容
在这里插入图片描述
动态sql执行DQL语句

DECLARE
	V_A A%ROWTYPE;
BEGIN
	EXECUTE IMMEDIATE 'SELECT * FROM A WHERE ID > :ID'
	INTO V_A
	USING 3;
	DBMS_OUTPUT.PUT_LINE(V_A.ID || ',' || V_A.NAME);
END;

查看输出结果:
在这里插入图片描述
改变一下参数,将id变量设置为1:

DECLARE
	V_A A%ROWTYPE;
BEGIN
	EXECUTE IMMEDIATE 'SELECT * FROM A WHERE ID > :ID'
	INTO V_A
	USING 1;
	DBMS_OUTPUT.PUT_LINE(V_A.ID || ',' || V_A.NAME);
END;

执行之后报错:
在这里插入图片描述
原因是id>1的数据有多条,不能同时赋值给V_A变量。
所以:into变量不能返回多行

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值