当前位置:首页 > 编程笔记 > 正文
已解决

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%的人还看了

猜你感兴趣

版权申明

本文"PL/SQL动态SQL":http://eshow365.cn/6-16077-0.html 内容来自互联网,请自行判断内容的正确性。如有侵权请联系我们,立即删除!