/*
CREATE OR REPLACE PROCEDURE MANAGER_NAME(P_MNAME OUT VARCHAR2)
AS
BEGIN
SELECT MGR INTO P_MNAME from emp ;
END;
*/
DECLARE
V_MNAME VARCHAR2;
BEGIN
MANAGER_NAME(V_MNAME);
DBMS_OUTPUT.PUT_LINE('雇员的经理名为: '||V_MNAME);
END;V_MNAME VARCHAR2;
*
第 2 行出现错误:
ORA-06550: 第 2 行, 第 9 列:
PLS-00215: 字符串长度限制在范围 (1...32767)
V_MNAME VARCHAR2; -- 沒指定長度,默認為1 改成v_mname varchar2(200);
BEGIN
MANAGER_NAME(V_MNAME);
DBMS_OUTPUT.PUT_LINE('雇员的经理名为: '||V_MNAME);
END;
改为V_MNAME VARCHAR2(4000);
varchar2变量声明的时候需要加长度
CREATE OR REPLACE PROCEDURE MANAGER_NAME(P_MNAME OUT VARCHAR2)
AS
BEGIN
SELECT MGR INTO P_MNAME from emp ;
END;
*/
DECLARE
V_MNAME emp.MGR%type;
BEGIN
MANAGER_NAME(V_MNAME);
DBMS_OUTPUT.PUT_LINE('雇员的经理名为: '||V_MNAME);
END;
2 AS
3 BEGIN
4 --你这个会返回多个mgr 但是P_MNAME只能接受单个值
5 SELECT MGR INTO P_MNAME from emp where empno=7369;
6* END;
SQL> /过程已创建。SQL> DECLARE
2 V_MNAME VARCHAR2(10);
3 BEGIN
4 MANAGER_NAME(V_MNAME);
5 DBMS_OUTPUT.PUT_LINE('雇员的经理名为: '||V_MNAME);
6 END;
7 /
雇员的经理名为: 7902PL/SQL 过程已成功完成。
DECLARE
*
第 1 行出现错误:
ORA-01422: 实际返回的行数超出请求的行数
ORA-06512: 在 "BOOK.MANAGER_NAME", line 4
ORA-06512: 在 line 4
DECLARE
*
第 1 行出现错误:
ORA-01422: 实际返回的行数超出请求的行数
ORA-06512: 在 "BOOK.MANAGER_NAME", line 4
ORA-06512: 在 line 4
DBMS_OUTPUT.PUT_LINE('雇员'||v_ename '的经理名为:' ||V_MNAME);
2 AS
3 P_MNAME varchar2(20);
4 BEGIN
5 SELECT MGR INTO P_MNAME from emp where empno=P_NO;
6 dbms_output.put_line('雇员'||P_NO||'的经理为:'||P_MNAME);
7* END;
SQL> /过程已创建。SQL> exec MANAGER_NAME('7369');
雇员7369的经理为:7902
AS
BEGIN
SELECT MGR,ENAME INTO P_MNAME, P_ENAME from emp where empno='7369';
END;
两个问题,首先在声明中定义的VARCHAR2变量必须赋予长度。
另外,如果sql查询出的是多条记录的话,将会报返回行数错误,因为多个值没办法同时赋值给一个变量。
如果单纯想测试的话,最好给sql加上查询条件,或者在查询赋值前判断返回行数。