已解决
PL/SQL动态SQL
来自网友在路上 174874提问 提问时间:2023-10-06 02:19:56阅读次数: 74
最佳答案 问答题库748位专家为你答疑解惑
目录
1. 动态 sql
2. 带参数的动态 sql
-- 不使用 USING 传参
1. 动态 sql
-- 在 PL/SQL 程序开发中,可以使用 DML 语句,但是很多语句(如 DDL),不能直接在 PL/SQL中执行,这些语句可以使用动态 sql 来实现.
语法格式:
EXECUTE IMMEDIATE --动态语句的字符串
[into 变量类型] --动态sql查出来的数据给到变量
[using 参数类型] --USING 为动态sql语句中的参数传值
BEGIN-- CREATE TABLE EMP_555 AS SELECT * FROM EMP; 不允许EXECUTE IMMEDIATE 'CREATE TABLE EMP_555 AS SELECT * FROM EMP';
END;
-- 案例:根据 JOB 删除数据
DECLAREV_STR VARCHAR2(1000);V_JOB VARCHAR2(20);
BEGINV_JOB := '&请输入要删除的职业';V_STR := 'DELETE FROM EMP_555 WHERE JOB=' || CHR(39)|| V_JOB || CHR(39);EXECUTE IMMEDIATE V_STR ; --将变量拼起来DBMS_OUTPUT.PUT_LINE(V_STR);
END;
单引号
SELECT
CHR(39), --单引号
'''' -- 单引号
FROM DUAL;
2. 带参数的动态 sql
-- 如果动态语句是 SELECT 语句,可以把查询的语句保存到 INTO 后面的变量中
如果 动态语句中存在参数, USING 为语句中的参数传值
--案例:根据员工工号和部门号查询员工的名字和工资
DECLARE
V_SQL VARCHAR2(4000);
V_ENAME VARCHAR2(20);
V_SAL NUMBER;
V_EMPNO NUMBER;
V_DEPTNO NUMBER;
BEGINV_EMPNO:=&员工工号;V_DEPTNO:=&部门号;V_SQL :='SELECTE.ENAME,E.SALFROM EMP E
WHERE E.EMPNO=:P_EMPNO
AND E.DEPTNO=:P_DEPTNO' ;-- 用: 参数名称EXECUTE IMMEDIATE V_SQL --2
INTO V_ENAME,V_SAL -- 动态sql查出来的数据给到变量 --3
USING V_EMPNO,V_DEPTNO ;
--参数 ,顺序要注意,参数名称可以随意写,将 V_DEPTNO 传递给 动态SQL参数 P_DEPTNO -- 1 DBMS_OUTPUT.put_line(V_ENAME || ' ' || V_SAL );
END;
-- 不使用 USING 传参
--案例:根据员工工号查询员工的名字和工资
DECLARE
V_SQL VARCHAR2(4000);
V_ENAME VARCHAR2(20);
V_SAL NUMBER;
V_EMPNO NUMBER;
BEGINV_EMPNO:=&请输入员工工号;V_SQL :='SELECTE.ENAME,E.SALFROM EMP E
WHERE E.EMPNO=' || chr(39) || V_EMPNO || chr(39); --1EXECUTE IMMEDIATE V_SQL --2
INTO V_ENAME,V_SAL ;-- 动态sql查出来的数据给到变量 --3DBMS_OUTPUT.put_line(V_ENAME || ' ' || V_SAL );
END;
查看全文
99%的人还看了
相似问题
- JavaScript基础—for语句、循环嵌套、数组、冒泡排序、综合案例—根据数据生成柱形图
- P6 C++控制流语句(continue, break, return)
- (二)汇编语句组成
- MATLAB 嵌套switch语句||MATLAB while循环
- ⑩⑤【DB】详解MySQL存储过程:变量、游标、存储函数、循环,判断语句、参数传递..
- 事关Django的静态资源目录设置(Django的setting.py中的三句静态资源(static)目录设置语句分别是什么作用?)
- Python基础入门例程55-NP55 2的次方数(循环语句)
- JavaScript条件分支语句-if 语句
- 【Python基础】try-finally语句和with语句
- if,switch语句
猜你感兴趣
版权申明
本文"PL/SQL动态SQL":http://eshow365.cn/6-16077-0.html 内容来自互联网,请自行判断内容的正确性。如有侵权请联系我们,立即删除!