Процедура с ошибкой последовательности - возникает необходимость в PLS-00103 - PullRequest
0 голосов
/ 14 мая 2018

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

Компиляция не удалась, строка 10 (11:48:18) PLS-00103: Обнаружен символ «НАЧАЛО» при ожидании одного из следующего:; с идентификатором кластера в качестве порядка кластеров с использованием внешнего детерминированного параллелепипеда, доступного по конвейеру result_cache доступен

Могу ли я получить некоторые рекомендации по решению этой проблемы, так как я новичок в sql, спасибо, ребята, и исследования не помогают.

оригинальный код

create or replace procedure hirecst
       (CST_NAME VARCHAR2,
        START_DATE DATE,
        LEAVE_DATE DATE,
        LOCATION VARCHAR2,
        SPECIALIST_AREA VARCHAR2)

    RETURN NUMBER IS
       new_cst NUMBER;
    BEGIN
       SELECT CONSULTANT_IDSEQ.NEXTVAL
          INTO new_cst
          FROM DUAL;
       INSERT INTO LDS_CONSULTANT (CONSULTANT_ID, CST_NAME, START_DATE, LEAVE_DATE, LOCATION, SPECIALIST_AREA)
          VALUES (new_cst, p_con_name, p_con_start, p_con_end, p_con_loc, p_con_spec);

       RETURN(new_cst);
    END;

убрал возврат

create or replace procedure hirecst
   (CST_NAME VARCHAR2,
    START_DATE DATE,
    LEAVE_DATE DATE,
    LOCATION VARCHAR2,
    SPECIALIST_AREA VARCHAR2)



BEGIN
new_cst NUMBER;
   SELECT CONSULTANT_IDSEQ.NEXTVAL
      INTO new_cst
      FROM DUAL;
   INSERT INTO LDS_CONSULTANT (CONSULTANT_ID, CST_NAME, START_DATE, LEAVE_DATE, LOCATION, SPECIALIST_AREA)
      VALUES (new_cst, p_con_name, p_con_start, p_con_end, p_con_loc, p_con_spec);


END;

Ответы [ 2 ]

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

Примечание. Я игнорирую явное несоответствие между объявленными именами параметров и именами, используемыми в операторе INSERT.


Как указано в руководстве , вам необходим AS (или IS) ключевое слово, которое запускает фактическую часть процедуры - после чего необходимо написать объявление переменной:

create or replace procedure hirecst
   (CST_NAME VARCHAR2,
    START_DATE DATE,
    LEAVE_DATE DATE,
    LOCATION VARCHAR2,
    SPECIALIST_AREA VARCHAR2)
AS --<< HERE
  new_cst NUMBER;
BEGIN
   SELECT CONSULTANT_IDSEQ.NEXTVAL
      INTO new_cst
      FROM DUAL;

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

Однако, SELECT INTO вообще не требуется, вы можетеиспользуйте nextval непосредственно в операторе INSERT.Таким образом, вы можете упростить процедуру до:

create or replace procedure hirecst
   (CST_NAME VARCHAR2,
    START_DATE DATE,
    LEAVE_DATE DATE,
    LOCATION VARCHAR2,
    SPECIALIST_AREA VARCHAR2)
AS --<< Still needed!
BEGIN
   INSERT INTO LDS_CONSULTANT 
     (CONSULTANT_ID, CST_NAME, START_DATE, LEAVE_DATE, LOCATION, SPECIALIST_AREA)
   VALUES 
     (CONSULTANT_IDSEQ.NEXTVAL, p_con_name, p_con_start, p_con_end, p_con_loc, p_con_spec);
END;

Если вы хотите вернуть сгенерированный идентификатор из процедуры, вам нужен параметр OUT:

create or replace procedure hirecst
   (CST_NAME VARCHAR2,
    START_DATE DATE,
    LEAVE_DATE DATE,
    LOCATION VARCHAR2,
    SPECIALIST_AREA VARCHAR2, 
    p_consultant_id out integer) --<< HERE
AS 
BEGIN
   -- Assign the value to the OUT parameter
   p_consultant_id := CONSULTANT_IDSEQ.NEXTVAL;

   INSERT INTO LDS_CONSULTANT 
      (CONSULTANT_ID, CST_NAME, START_DATE, LEAVE_DATE, LOCATION, SPECIALIST_AREA)
    VALUES 
      (p_consultant_id, p_con_name, p_con_start, p_con_end, p_con_loc, p_con_spec);
END;
/
0 голосов
/ 14 мая 2018

Ниже приведен синтаксис процедуры-

CREATE [OR REPLACE] PROCEDURE procedure_name
    [ (parameter [,parameter]) ]

IS
    [declaration_section]

BEGIN
    executable_section

[EXCEPTION
    exception_section]

END [procedure_name];

И вы забыли ключевое слово «ЕСТЬ»

following is the code-

    create or replace procedure hirecst
           (CST_NAME VARCHAR2,
            START_DATE DATE,
            LEAVE_DATE DATE,
            LOCATION VARCHAR2,
            SPECIALIST_AREA VARCHAR2)

         IS
           new_cst NUMBER;
        begin
           SELECT CONSULTANT_IDSEQ.NEXTVAL
              INTO new_cst
              FROM DUAL;
           INSERT INTO LDS_CONSULTANT (CONSULTANT_ID, CST_NAME, START_DATE, LEAVE_DATE, LOCATION, SPECIALIST_AREA)
              VALUES (new_cst, p_con_name, p_con_start, p_con_end, p_con_loc, p_con_spec);

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