我创建了一个 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 通常用于数字索引而不是记录。

另外,当您编写该代码时,您的大写锁定已开启 ;)

我认为您的代码存在一些问题。

  1. C1不限制员工人数(意味着循环将 return 来自 table emp
  2. 的一个主要随机的行
  3. 您正在混合使用 FOR 循环和 FETCH 语法
  4. 变量 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 ;