Ошибка при настройке пакета SQL с функциями и процедурами - PullRequest
0 голосов
/ 13 мая 2018

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

'PLS-00103: Обнаружен символ "FUNCTION "при ожидании одного из следующих действий: авторизован как сжатый скомпилированный упакованный доступный Символ" is "был заменен на" FUNCTION "для продолжения.Ошибка компиляции, строка 2 (17:11:44) PLS-00103: обнаружен символ «НОМЕР» при ожидании одного из следующих действий: (Ошибка компиляции, строка 3 (17:11:44) PLS-00103: обнаружен символ »CREATE "при ожидании одного из следующих действий: как сжатый скомпилированный пакет"

Я прочитал его и провел исследование, чтобы попытаться решить проблему, но не смог исправить ее, возможно, у меня есть некоторыепомощь, чтобы направить меня к решению проблемы. Спасибо переполнение стека за рассмотрение вопроса, поскольку я новичок в SQL.

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

create or replace package e_con_pack
FUNCTION GET_LOCATION_namel (p_con_id in NUMBER, p_con_name out VARCHAR2)RETURN l_con_id;
procedure ADD_CONSULTANT;
procedure update_location;
procedure delete_con;
end e_con_pack;

тело пакета

create or replace PACKAGE BODY e_con_pack

    create or replace 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 l_con_id;
    END;

    create or replace 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;

    create or replace 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;

    create or replace 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;
    END e_con_pack;

Ответы [ 2 ]

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

Вам не хватает ключевого слова AS/IS.Попробуйте следующее:

create or replace package e_con_pack
AS
    FUNCTION GET_LOCATION_namel (p_con_id in NUMBER, p_con_name out VARCHAR2)
:
:
0 голосов
/ 13 мая 2018

Я думаю, что проблема в типе возврата в различии пакетов

FUNCTION GET_LOCATION_namel (p_con_id в NUMBER, p_con_name out VARCHAR2) RETURN l_con_id ;

должно быть чем-то вроде

FUNCTION GET_LOCATION_namel (p_con_id in NUMBER, p_con_name out VARCHAR2)RETURN NUMBER;

, также внутри тела функции нет различий с переменной l_cod_id, которую вы возвращаете

...