功能描述:创建一个过程,通过动态SQL语句实现动态查询
代码:
CREATE OR REPLACE PROCEDURE PRO_EMP(E_ID NUMBER)
AS
BEGIN
DECLARE
V_NAME EMP.EMPNO%TYPE;
V_SAL EMP.SAL%TYPE;
BEGIN
EXECUTE IMMEDIATE 'SELECT ENAME,SAL FROM EMP WHERE EMPNO=:1' USING E_ID RETURNING INTO V_NAME,V_SAL;
DBMS_OUTPUT.PUT_LINE(V_NAME||'的薪水为'||V_SAL);
END;
END;
/
问题描述:过程创建成功,但执行报错。
执行代码:EXECUTE PRO_EMP(7499);
错误提示:
ORA-06547: INSERT,UPDATE,或 DELETE 语句必须使用 RETURNING 子句
ORA-06512: 在"SCOTT.PRO_EMP", line 8
ORA-06512: 在line 1
********************************************
所以为问题全部描述,望大家帮忙找错,谢谢!
代码:
CREATE OR REPLACE PROCEDURE PRO_EMP(E_ID NUMBER)
AS
BEGIN
DECLARE
V_NAME EMP.EMPNO%TYPE;
V_SAL EMP.SAL%TYPE;
BEGIN
EXECUTE IMMEDIATE 'SELECT ENAME,SAL FROM EMP WHERE EMPNO=:1' USING E_ID RETURNING INTO V_NAME,V_SAL;
DBMS_OUTPUT.PUT_LINE(V_NAME||'的薪水为'||V_SAL);
END;
END;
/
问题描述:过程创建成功,但执行报错。
执行代码:EXECUTE PRO_EMP(7499);
错误提示:
ORA-06547: INSERT,UPDATE,或 DELETE 语句必须使用 RETURNING 子句
ORA-06512: 在"SCOTT.PRO_EMP", line 8
ORA-06512: 在line 1
********************************************
所以为问题全部描述,望大家帮忙找错,谢谢!
解决方案 »
- 粗糙的sql,大虾帮忙看看,优化下
- 各路神仙,小弟刚接触oracle,问个简单的问题。
- 我是oracle菜鸟,帮忙看看这个过程有问题吗,怎样调用呢?
- 关于建表的问题
- 【新年快乐】求一个简单的oracle触发器,可是我不会写
- 如何导入导出大量数据(数据量在2.4G),
- oracle如何读未提交的数据
- 关于数据统计的sql写法,帮忙撒
- oracel sql中相当于now(),current_timestamp的函数是什么?
- 在ASP中不用UPDATA语句,用记录集是否可以修改某字段值啊
- 一个时间段的查询,取2006年1月到4月之间的 数据;sql语句怎么 写,谢谢。在线等.
- sql语句:如何将横表导成竖表?
2)我所知道是(有关书籍也介绍过) returning into 语句作用于DML。
而DML语句是包含SELECT语句的,错误提示我明白,可我想知道是,实践和书籍上说的是不是相同·!如果两者没有冲突,那么我的这个问题是什么原因!?
3)继续期待ING 谢谢大家!
AS
BEGIN
DECLARE
V_NAME EMP.EMPNO%TYPE;
V_SAL EMP.SAL%TYPE;
BEGIN
EXECUTE IMMEDIATE 'SELECT ENAME,SAL FROM EMP WHERE EMPNO=:1' INTO V_NAME,V_SAL USING E_ID;
DBMS_OUTPUT.PUT_LINE(V_NAME||'的薪水为'||V_SAL);
END;
END;
/
1)感谢两位的帮助
2)按照waterfirer(水清) 的修改后运行已久有错误但错误以改变
错误提示:
ORA-01722: 无效数字
ORA-06512: 在"SCOTT.PRO_EMP", line 8
ORA-06512: 在line 1
3)into 与returning into 有什么区别么?
1)应该用 into 而不是 returning into 因为returning子句作用于insert,update,delete,上而select则不行!
2)产生无效数字错误是 变类型定义错误 为手误!
谢谢大家!