To get data from Stored Procedure having without parameter

时间:2017-07-12 07:59:24

标签: oracle stored-procedures plsql

I have a stored procedure proc1 without parameters. I want to extract data from this stored procedure. How can I get that? Could you help me?

Stored procedure:

create procedure proc1 
as
begin
    select e_id, e_nm, e_sal 
    from emp 
    where e_id like 'e%';
end proc1;

3 个答案:

答案 0 :(得分:1)

您可以在Oracle 12.1或更高版本中执行此操作:

create or replace procedure demo
as
    rc sys_refcursor;
begin
    open rc for select * from dual;
    dbms_sql.return_result(rc);
end demo;

这需要Oracle 12.1或更高版本的客户端/驱动程序来处理隐式结果集。

有关详细信息,请参阅Oracle 12.1 New Features GuideTom Kyte's BlogOracle Base等中的隐式结果集。

答案 1 :(得分:0)

这是一个可能的解决方案:

<强>声明:

create procedure proc1 (emp_row IN OUT emp%rowtype)
as
begin
  select * --e_id, e_nm, e_sal
    into emp_row
    from emp
   where e_id like 'e%';
end proc1;

使用案例

DECLARE
  l_emp_row emp%rowtype;
BEGIN
  proc1(l_emp_row);
  -- Here you can access every column of table "emp", like so:
    -- dbms_output.put_line('e_id:  ' || to_char(l_emp_row.e_id));
    -- dbms_output.put_line('e_nm:  ' || to_char(l_emp_row.e_nm));
    -- dbms_output.put_line('e_sal: ' || to_char(l_emp_row.e_sal));
END;

您需要退出程序吗?

干杯

答案 2 :(得分:0)

  1. 您创建此查询的视图。 (recomended)
  2. Oracle程序不返回任何数据。所以,你没有看到任何结果。您的结果获得缓冲但不是打印屏幕。如果您需要一个过程,请在另一个表中插入所有数据。

    create procedure proc1 
    as
    begin
    insert into new_table select e_id, e_nm, e_sal from emp where e_id like 'e%';
    end proc1;
    
  3. 另一种方式;你创建一个功能。因为功能输出和输入。这个功能;

    例如Create an Oracle function that returns a table