【问题标题】:how to get the output of stored procedure with in and output parameters pl/sql如何使用输入和输出参数pl/sql获取存储过程的输出
【发布时间】:2019-09-21 12:14:46
【问题描述】:

我已经创建了存储过程...在其中获取employee_name,salary和他的manager_name..过程已成功创建但是当我执行时给出无效参数的错误..我如何执行此过程...

create or replace procedure  employee_manager (
  dept_id in number,
  fname out varchar2,
  v_sal out number,
  fname1 out varchar2
)
is
begin
  select a.first_name manager_name,
         b.first_name employee_name,
         b.salary
  into fname,
       fname1,
       v_sal
  from employees a join employees b on a.employee_id = b.manager_id
  where a.department_id = dept_id;
end employee_manager ;

【问题讨论】:

  • 假设部门可以有多名员工,一旦您解决了调用程序的问题,您将获得too_many_rows 异常。如果您想要标量 out 参数,则需要运行返回单行的查询。如果要运行返回多行的查询,可以返回集合类型。但返回sys_refcursor 可能更有意义。但我会质疑将这段代码放在一个过程中是否真的有意义,而不仅仅是创建一个可以查询的视图。

标签: oracle stored-procedures plsql


【解决方案1】:

如果您向我们展示您调用该程序时究竟发生了什么,或者 - 至少 - 发布 ORA-xxxxx 错误代码,将会有所帮助。根据我们目前掌握的信息,我们只能猜测。

我的猜测是你错误地称呼它。由于它接受一个 IN 参数和三个 OUT 参数,因此您必须声明三个变量;像这样:

declare
  l_fname   employees.first_name%type;
  l_sal     employees.salary%type;
  l_fname1  employees.first_name%type;
begin
  employee_manager(dept_id     => 10,
                   fname       => l_fname,
                   v_sal       => l_sal,
                   fname1      => l_fname1);

  dbms_output.put_line('Values returned are: ' || l_fname ||', '|| l_sal ||', '|| l_fname1);
end;
/

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-07-26
    • 1970-01-01
    • 2023-03-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多