oracle之动态sql

oracle之动态sqloracle中的动态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变量不能返回多行

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/36203.html

(0)
编程小号编程小号

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注