【问题标题】:"wrong number or types of arguments in call" when inserting rows? PL/SQL插入行时“调用中的参数数量或类型错误”? PL/SQL
【发布时间】:2019-04-05 15:07:04
【问题描述】:

所以我正在尝试调用我制作的程序。该过程已成功完成,但是,当我尝试插入值时,它告诉我我没有正确数量的参数。

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 时参数的数量或类型错误”谢谢

【问题讨论】:

  • 您已将过程定义为采用 10 个参数,但您只提供了 7 个。
  • 如何在程序中声明额外的 3?

标签: oracle stored-procedures plsql


【解决方案1】:

需要声明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;

【讨论】:

  • 你不能在一个块中使用Call所以删除它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-08
  • 1970-01-01
  • 1970-01-01
  • 2019-12-23
  • 2021-07-15
相关资源
最近更新 更多