Oracle 从具有无参数的存储过程中获取数据

Oracle 从具有无参数的存储过程中获取数据,oracle,stored-procedures,plsql,Oracle,Stored Procedures,Plsql,我有一个没有参数的存储过程proc1。我想从这个存储过程中提取数据。我怎么能得到这个?你能帮我吗 存储过程: create procedure proc1 as begin select e_id, e_nm, e_sal from emp where e_id like 'e%'; end proc1; 这里有一个可能的解决方案: 声明: create procedure proc1 (emp_row IN OUT emp%rowtype) as begin

我有一个没有参数的存储过程
proc1
。我想从这个存储过程中提取数据。我怎么能得到这个?你能帮我吗

存储过程:

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

这里有一个可能的解决方案:

声明:

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;
用例:

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;
有什么特别的东西你需要从程序中得到吗

干杯

  • 您可以在此查询中创建一个视图。(建议)
  • 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;
    
  • 另一种方式;您可以创建一个函数。因为函数的输出和输入。此功能


    例如,您可以在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或更高版本的客户端/驱动程序来处理隐式结果集


    有关更多详细信息,请参阅中的隐式结果集等。

    您应该更具体一些-以获得一些答案。。。该程序的目的是什么?您是编写存储过程的人吗?您想提取什么样的数据?@Plirkee在这个过程中有一些SQL语句,但没有参数。我如何从这个存储过程中获取或提取数据,或者如何从具有参数的存储过程中获取数据如果您不在问题中发布您的过程代码,讨论这个问题将不会有任何结果。@Shahin发布代码并解释您想要提取什么(期望的输出)。。。否则,我怀疑你会得到任何有用的答案。如果没有参数,你无法从过程中获得数据。您可以将游标作为输出参数返回,也可以将一些标量值作为输出参数返回,但最后需要参数。看起来它有一个参数;)