"неправильный номер или типы аргументов в вызове" при вставке строк?PL / SQL - PullRequest
1 голос
/ 05 апреля 2019

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

CREATE OR REPLACE PROCEDURE insert_employee
(
    p_employeeid            IN employees.employeeid%TYPE,
    p_employeename          IN employees.employeename%TYPE,
    p_phone                 IN employees.phone%TYPE,
    p_jobid                 IN employees.jobid%TYPE,
    p_salary                IN employees.salary%TYPE,
    p_managerid             IN employees.managerid%TYPE,
    p_departmentid          IN employees.departmentid%TYPE,
    jobid_cnt       OUT INTEGER,
    deptid_cnt      OUT INTEGER,
    empid_cnt           OUT INTEGER
)

AS
BEGIN
    IF p_employeeid   IS NULL OR
       p_employeename IS NULL OR
       p_jobid        IS NULL OR
       p_salary < 0 
    THEN
       RAISE VALUE_ERROR;
    END IF;
    SELECT count(*)
        INTO jobid_cnt
        FROM employees e
        WHERE e.jobid = p_jobid;

    IF jobid_cnt = 0 THEN     -- there's no such job in the table
        RAISE VALUE_ERROR;
    END IF;

    SELECT count(*)
        INTO deptid_cnt
        FROM employees e
        WHERE e.departmentid = p_departmentid;

    IF deptid_cnt = 0 THEN     -- there's no such department in the table
        RAISE VALUE_ERROR;
    END IF;

    SELECT count(*)
        INTO empid_cnt
        FROM employees e
        WHERE e.employeeid = p_employeeid;

    IF deptid_cnt > 0 THEN     -- employee already exists within table
        RAISE_APPLICATION_ERROR(-20001, 'Employee already exists');
    END IF;

    COMMIT;
END;
/


CALL insert_employee(109, 'Jack', '416 123 4567', 'FI_ACCOUNT', 7890.00, 104, 30);

Я ожидаю, что параметры OUT отличаются от параметров IN,но я могу ошибатьсяОшибка становится «PLS-00306: неверный номер или типы аргументов при вызове INSERT_EMPLOYEE» Спасибо

1 Ответ

4 голосов
/ 05 апреля 2019

Вам необходимо объявить параметры out и выполнить процедуру

declare
    jobid_cnt        INTEGER;
    deptid_cnt      INTEGER ;
    empid_cnt            INTEGER;
begin 
   insert_employee(109, 'Jack', '416 123 4567', 'FI_ACCOUNT', 7890.00, 104, 30,jobid_cnt,deptid_cnt,empid_cnt);
    dbms_output.put_line(jobid_cnt);
    dbms_output.put_line(deptid_cnt);
    dbms_output.put_line(empid_cnt);
Commit;
end;
...