Как исправить ошибку «PLS-00302: компонент должен быть объявлен» - PullRequest
0 голосов
/ 18 июня 2019

Я пытаюсь скомпилировать приведенный ниже код, но получаю сообщение об ошибке:

"PLS-00302: должен быть объявлен компонент" DEPT_ID ".

DECLARE
DEPT_ID DEPARTMENTS.DID%TYPE;
DEPT_NAME DEPARTMENTS.DEPARTMENT_NAME%TYPE;
D_MID DEPARTMENTS.MANAGER_ID%TYPE;
D_LID DEPARTMENTS.LOCATION_ID%TYPE;
CURSOR C2 IS SELECT * FROM DEPARTMENTS WHERE DID=1;
D_ROW C2%ROWTYPE;
BEGIN
OPEN C2;
LOOP
FETCH C2 INTO D_ROW;
EXIT WHEN C2%NOTFOUND;
DBMS_OUTPUT.PUT_LINE(D_ROW.DEPT_ID||' | '||D_ROW.DEPT_NAME||' | '||D_ROW.D_MID||' | '||D_ROW.D_LID);
END LOOP;
CLOSE C2;
END;

Ответы [ 2 ]

2 голосов
/ 18 июня 2019

Кажется, вам нужно преобразовать в:

DECLARE
-- DEPT_ID DEPARTMENTS.DID%TYPE;
-- DEPT_NAME DEPARTMENTS.DEPARTMENT_NAME%TYPE;
-- D_MID DEPARTMENTS.MANAGER_ID%TYPE;
-- D_LID DEPARTMENTS.LOCATION_ID%TYPE;
   CURSOR C2 IS SELECT * FROM DEPARTMENTS WHERE DID=1;
   D_ROW C2%ROWTYPE;
BEGIN
   OPEN C2;
 LOOP
   FETCH C2 INTO D_ROW;
  EXIT WHEN C2%NOTFOUND;
  DBMS_OUTPUT.PUT_LINE(D_ROW.DID||' | '||D_ROW.DEPARTMENT_NAME||' | '||
                       D_ROW.MANAGER_ID||' | '||D_ROW.LOCATION_ID);
 END LOOP;
 CLOSE C2;
END;
/

те локальные переменные, которые не нужны, потому что ссылки на их связанные столбцы уже существуют в C2%rowtype, и они должны вызываться D_ROW симена столбцов.Ошибка возникает из-за использования локальных переменных вместо этих столбцов после префикса D_ROW..Например,

DBMS_OUTPUT.PUT_LINE(D_ROW.DEPT_ID||' | '||D_ROW.DEPT_NAME||' | '|| 
                     D_ROW.D_MID||' | '||D_ROW.D_LID);

преобразовано в

  DBMS_OUTPUT.PUT_LINE(D_ROW.DID||' | '||D_ROW.DEPARTMENT_NAME||' | '||
                       D_ROW.MANAGER_ID||' | '||D_ROW.LOCATION_ID);

Демо

0 голосов
/ 18 июня 2019

Начните с:

select owner, object_type, object_name
from all_objects
where object_name = 'DEPT_ID';

Может быть, есть объект с таким именем, который был объявлен ранее

[DBA-оракул] [1] http://dba -oracle.com / t_pls_00302.htm

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...