Попытка создать пакет - ошибка PLS-00330 - PullRequest
0 голосов
/ 13 мая 2018

Я пытаюсь создать пакет с функциями и процедурами. К сожалению, я столкнулся с проблемой, и произошла следующая ошибка

PLS-00330: сбой при неверном использовании имени типа или подтипа nameCompilation, строка 11(19:53:17)
PL / SQL: оператор игнорируется

Я прочитал его и провел исследование, чтобы попытаться решить проблему, но не смог ее исправить.

Спецификация пакета:

 create or replace package e_con_pack
        AS
        FUNCTION GET_LOCATION_namel (p_con_id in NUMBER, p_con_name out VARCHAR2)RETURN NUMBER;
        PROCEDURE ADD_CONSULTANT ( p_con_id           LDS_CONSULTANT.CONSULTANT_ID%type,
          p_con_name         LDS_CONSULTANT.CST_NAME%type,
          p_con_start        LDS_CONSULTANT.START_DATE%type,
          p_con_end          LDS_CONSULTANT.LEAVE_DATE%type,
          p_con_loc          LDS_CONSULTANT.LOCATION%type,
          p_con_spec         LDS_CONSULTANT.SPECIALIST_AREA%type);
          PROCEDURE update_location(p_con_id IN 
          lds_consultant.consultant_id%type,
          p_con_loc   IN lds_consultant.location%type);
          PROCEDURE delete_con (p_con_id  IN 
          lds_consultant.consultant_id%type);
          end e_con_pack; 

Тело пакета:

create or replace PACKAGE BODY e_con_pack
    AS
    FUNCTION 
    GET_LOCATION_namel (p_con_id in NUMBER, p_con_name out VARCHAR2)
    RETURN NUMBER IS  
     LOCATION VARCHAR2(30);
    BEGIN
      SELECT LOCATION INTO LOCATION FROM LDS_CONSULTANT WHERE CONSULTANT_ID = p_con_id;    
      SELECT CST_NAME INTO p_con_name FROM LDS_CONSULTANT WHERE CONSULTANT_ID = p_con_id;

    RETURN NUMBER;
    END GET_LOCATION_namel;

    PROCEDURE ADD_CONSULTANT
    ( p_con_id           LDS_CONSULTANT.CONSULTANT_ID%type,
      p_con_name         LDS_CONSULTANT.CST_NAME%type,
      p_con_start        LDS_CONSULTANT.START_DATE%type,
      p_con_end          LDS_CONSULTANT.LEAVE_DATE%type,
      p_con_loc          LDS_CONSULTANT.LOCATION%type,
      p_con_spec         LDS_CONSULTANT.SPECIALIST_AREA%type)
    IS
    BEGIN

    INSERT INTO LDS_CONSULTANT (CONSULTANT_ID, CST_NAME, START_DATE, LEAVE_DATE, LOCATION, SPECIALIST_AREA)
    VALUES (p_con_id, p_con_name, p_con_start, p_con_end, p_con_loc, p_con_spec);
    END ADD_CONSULTANT;

    PROCEDURE update_location (
      p_con_id     IN lds_consultant.consultant_id%type,
      p_con_loc   IN lds_consultant.location%type
    )
    IS
    BEGIN
      UPDATE lds_consultant
        SET
          location = p_con_loc
      WHERE consultant_id = p_con_id;
    END update_location;

    PROCEDURE delete_con (
      p_con_id  IN lds_consultant.consultant_id%type )
        As
        Begin   

             Delete from LDS_CONSULTANT Where CONSULTANT_ID=p_con_id;

    END delete_con;
    END e_con_pack;

1 Ответ

0 голосов
/ 13 мая 2018

Ошибка сообщается в строке 11 тела пакета, которая равна

    RETURN NUMBER;

Число - это тип данных, а не имя переменной. Не ясно, что вы на самом деле хотите вернуть сюда; когда вы запрашиваете и захватываете его, возможно, LOCATION; но так как это строка, тип возвращаемого значения функции также должен быть строкой (т.е. VARCHAR2, а не NUMBER). Может быть:

create or replace PACKAGE BODY e_con_pack
    AS
    FUNCTION 
    GET_LOCATION_namel (p_con_id in NUMBER, p_con_name out VARCHAR2)
    RETURN VARCHAR2 IS  
     LOCATION VARCHAR2(30);
    BEGIN
      SELECT LOCATION INTO LOCATION FROM LDS_CONSULTANT WHERE CONSULTANT_ID = p_con_id;    
      SELECT CST_NAME INTO p_con_name FROM LDS_CONSULTANT WHERE CONSULTANT_ID = p_con_id;

    RETURN LOCATION;
    END GET_LOCATION_namel;

Или даже лучше, используйте тип данных столбца, как вы уже в другом месте:

create or replace PACKAGE BODY e_con_pack
    AS
    FUNCTION 
    GET_LOCATION_namel (p_con_id in NUMBER, p_con_name out VARCHAR2)
    RETURN LDS_CONSULTANT.LOCATION%type IS  
     LOCATION LDS_CONSULTANT.LOCATION%type;
    BEGIN
...

В любом случае, вам, конечно, придется изменить спецификацию пакета, чтобы она соответствовала.

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