PL / SQL INSERT ALL оператор проигнорирован и отсутствует статистика выбора - PullRequest
0 голосов
/ 06 мая 2020

ниже - это моя процедура для вставки информации в 2 таблицы.

CREATE OR REPLACE PROCEDURE INSERT_EMPLOYEE(eNum IN NUMBER,
                                            eName VARCHAR2,
                                            dob DATE,
                                            ddr VARCHAR2,
                                            hDate DATE,
                                            lNum NUMBER,
                                            status VARCHAR2,
                                            expr VARCHAR2)
IS
BEGIN
INSERT ALL 
    INTO TRKEMPLOYEE (E#, NAME, DOB, ADDRESS, HIREDATE) VALUES (eNum, eName, dob, addr, hDate);
    INTO MECHANIC (E#, L#, STATUS, EXPERIENCE) VALUES (eNum, lNum, expr);
SELECT * FROM DUAL;
END INSERT_EMPLOYEE;
/

Однако при компиляции процедуры у меня возникают ошибки.

11/2     PL/SQL: SQL Statement ignored
12/93    PL/SQL: ORA-00928: missing SELECT keyword
13/3     PLS-00103: Encountered the symbol "INTO" when expecting one of
         the following:
         ( begin case declare end exception exit for goto if loop mod
           <an identifier> <a double-quoted delimited-identifier>
           <a bind variable> << continue close current delete fetch lock
           insert open rollback savepoint set sql execute commit forall
           merge pipe purge json_exists json_value json_query
           json_object json_array

LINE/COL ERROR
-------- -----------------------------------------------------------------
         The symbol "insert" was substituted for "INTO" t

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

1 Ответ

1 голос
/ 06 мая 2020

В select должны быть указаны все значения, поэтому:

    insert all 
        into trkemployee (e#, name, dob, address, hiredate) values (enum, ename, dob, addr, hdate) 
        into mechanic (e#, l#, status, experience) values (enum, lnum, expr) 
    select eNum, eName, dob, addr, hDate,  lNum, expr from dual;

Двойное само по себе - это одна строка, один столбец.

...