我创建了一个 PL/SQL 程序 我想简单地显示两条消息?
I create one PL/SQL procedure i want simple show two messages?
下面的PL/SQL程序:
'DECLARE
V_EMPNO NUMBER(10):=&EMPNO;
V_EMPNO2 NUMBER(10):= 0;
CURSOR C1 IS SELECT EMPNO FROM EMP;
BEGIN
FOR I IN C1 LOOP
FETCH C1 INTO V_EMPNO2;
EXIT WHEN C1%FOUND;
END LOOP;
IF (LENGTH(V_EMPNO)) > 4 THEN
DBMS_OUTPUT.PUT_LINE ('LENGTH OF EMPNO GREATER THAN 4 NUMBER');
ELSIF (V_EMPNO = V_EMPNO2) THEN
DBMS_OUTPUT.PUT_LINE ('THIS EMPLOYEE NUMBER ALREADY EXIST');
END IF;
END;
/'
在此过程中我想显示两条消息
一种是如果长度大于数字 4 则显示消息
第二个是如果 v_empno = v_empno2
然后显示第二条消息
empno = v_empno 然后显示消息:
DBMS_OUTPUT.PUT_LINE ('THIS EMPLOYEE NUMBER ALREADY EXIST')
this is error
Enter value for empno: 4444
DECLARE
*
ERROR at line 1:
ORA-01001: invalid cursor
ORA-06512: at line 7
FOR I IN C1 LOOP
已经隐式打开c1
并处理抓取,所以你在它之后的显式抓取是无效的。
顺便说一句 i
通常用于数字索引而不是记录。
另外,当您编写该代码时,您的大写锁定已开启 ;)
我认为您的代码存在一些问题。
- C1不限制员工人数(意味着循环将
return 来自 table emp
的一个主要随机的行
- 您正在混合使用 FOR 循环和 FETCH 语法
- 变量 v_empno 是一个数字,您在检查长度时需要小心 - 您需要明确 TO_CHAR 并控制格式 - 通常 TO_CHAR 最终会包含 space 个字符(另一种方法是检查数字的值 < 10000)
我没有测试过这段代码,但这可能更接近你想要的:
DECLARE
l_empno NUMBER := &empno ;
CURSOR C_get_emp
IS
SELECT e.empno
FROM emp e
WHERE e.empno = l_empno
;
R_emp C_get_emp%ROWTYPE ;
BEGIN
IF LENGTH(TRIM(TO_CHAR(l_empno))) > 4 THEN
DBMS_OUTPUT.put_line('Length of empno > 4') ;
ELSE
OPEN C_get_emp ;
FETCH C_get_emp INTO R_emp ;
IF C_get_emp%FOUND THEN
DBMS_OUTPUT.put_line('Employee number already exists') ;
END IF ;
CLOSE C_get_emp ;
END IF ;
END ;
下面的PL/SQL程序:
'DECLARE
V_EMPNO NUMBER(10):=&EMPNO;
V_EMPNO2 NUMBER(10):= 0;
CURSOR C1 IS SELECT EMPNO FROM EMP;
BEGIN
FOR I IN C1 LOOP
FETCH C1 INTO V_EMPNO2;
EXIT WHEN C1%FOUND;
END LOOP;
IF (LENGTH(V_EMPNO)) > 4 THEN
DBMS_OUTPUT.PUT_LINE ('LENGTH OF EMPNO GREATER THAN 4 NUMBER');
ELSIF (V_EMPNO = V_EMPNO2) THEN
DBMS_OUTPUT.PUT_LINE ('THIS EMPLOYEE NUMBER ALREADY EXIST');
END IF;
END;
/'
在此过程中我想显示两条消息
一种是如果长度大于数字 4 则显示消息
第二个是如果 v_empno = v_empno2
然后显示第二条消息
empno = v_empno 然后显示消息:
DBMS_OUTPUT.PUT_LINE ('THIS EMPLOYEE NUMBER ALREADY EXIST')
this is error
Enter value for empno: 4444
DECLARE
*
ERROR at line 1:
ORA-01001: invalid cursor
ORA-06512: at line 7
FOR I IN C1 LOOP
已经隐式打开c1
并处理抓取,所以你在它之后的显式抓取是无效的。
顺便说一句 i
通常用于数字索引而不是记录。
另外,当您编写该代码时,您的大写锁定已开启 ;)
我认为您的代码存在一些问题。
- C1不限制员工人数(意味着循环将 return 来自 table emp 的一个主要随机的行
- 您正在混合使用 FOR 循环和 FETCH 语法
- 变量 v_empno 是一个数字,您在检查长度时需要小心 - 您需要明确 TO_CHAR 并控制格式 - 通常 TO_CHAR 最终会包含 space 个字符(另一种方法是检查数字的值 < 10000)
我没有测试过这段代码,但这可能更接近你想要的:
DECLARE
l_empno NUMBER := &empno ;
CURSOR C_get_emp
IS
SELECT e.empno
FROM emp e
WHERE e.empno = l_empno
;
R_emp C_get_emp%ROWTYPE ;
BEGIN
IF LENGTH(TRIM(TO_CHAR(l_empno))) > 4 THEN
DBMS_OUTPUT.put_line('Length of empno > 4') ;
ELSE
OPEN C_get_emp ;
FETCH C_get_emp INTO R_emp ;
IF C_get_emp%FOUND THEN
DBMS_OUTPUT.put_line('Employee number already exists') ;
END IF ;
CLOSE C_get_emp ;
END IF ;
END ;