Pl sql не объявленная ошибка, даже если она должна быть объявлена - PullRequest
0 голосов
/ 06 апреля 2020

Здравствуйте, я новичок в Pl sql, и я пытаюсь получить новый идентификатор для нового сотрудника

Это таблица emp:

EMPNO             NUMBER(4)    
ENAME             VARCHAR2(10) 
JOB               VARCHAR2(9)  
MGR               NUMBER(4)    
HIREDATE          DATE         
SAL               NUMBER(7,2)  
COMM              NUMBER(7,2)  
DEPTNO   NOT NULL NUMBER(2)

Это моя функция

DECLARE 
 empno number;
FUNCTION findNewEmpno  
RETURN number 
IS 
    empno number; 
BEGIN 
   select Max(empno)
   into empno from emp;
END; 
BEGIN 
   dbms_output.put_line(' New Empno is : ' || empno); 
END; 
/ 

И это сообщение об ошибке, которое я получаю:

Error report -
ORA-06550: line 13, column 7:
PLS-00201: identifier 'FINDNEWEMPNO' must be declared
ORA-06550: line 13, column 7:
PL/SQL: Statement ignored
06550. 00000 -  "line %s, column %s:\n%s"
*Cause:    Usually a PL/SQL compilation error.

Понятия не имею, почему FINDNEWEMPNO не объявлено. Функция находится выше точки, где она вызывается.

1 Ответ

1 голос
/ 06 апреля 2020

Должно быть так:

  • создать функцию
  • вызвать ее

SQL> create or replace function findnewempno
  2    return number
  3  is
  4    v_empno number;
  5  begin
  6    select max(empno)
  7      into v_empno
  8      from emp;
  9
 10    return v_empno;
 11  end;
 12  /

Function created.

SQL> select findnewempno from dual;

FINDNEWEMPNO
------------
        7934

SQL>

Или, как вы пытались дисплей это:

SQL> set serveroutput on
SQL>
SQL> begin
  2    dbms_output.put_line('Max EMPNO = ' || findnewempno);
  3  end;
  4  /
Max EMPNO = 7934

PL/SQL procedure successfully completed.

SQL>
...