将视图转换为存储过程

时间:2016-08-25 09:39:29

标签: plsql oracle11g

我有一个像这样的观点。我刚刚给出了部分代码

DROP VIEW u_EVENT;

CREATE VIEW u_EVENT AS

 WITH time_summary_data
          AS (  SELECT   u_name,
                         u_id,
                         u_event_id,
                         --  max(d_report_date)   d_report_date,
                         --  max(d_time_from)  d_time_from,
-------
--
---

我从视图中获取记录集。现在我想转换成存储过程。使用with条款时,我不明白该怎么做。

我试过下面的一个。它成功编译但无法显示记录集。我做的正确或其他一些方法。如何显示记录集,不知道。这个Sp是正确的吗?

CREATE OR REPLACE
PROCEDURE TEST (p_param2 out sys_refcursor)
AS
BEGIN
open p_param2 for
WITH time_summary_data AS

2 个答案:

答案 0 :(得分:0)

存储过程不会向屏幕发送内容。您必须打开几个设置才能进入屏幕:

如果您使用的是sqlplus,则必须使用此设置:

set serveroutput on;

在你的程序中,你必须把它放到屏幕上才能显示:

exec dbms_output.put_line('Putting my stuff on the screen');

您无法像使用SQL Server一样显示表中的选择。

答案 1 :(得分:0)

对我而言,它与转换没有任何“WITH”的视图相同。

假设您有一个简单的视图,如下所示:

create or replace view Mark_Jones as
  with tbl(name, id) as (
             select 'MarkJones'  name , 1 id from dual
   union all select 'LemiWink'    , 2 from dual
   union all select 'ChinaLTD'    , 3 from dual
   union all select 'GrowsInvest' , 4 from dual     
  )
  select * from tbl
;

它显示:

SQL> select * from mark_jones;
MarkJones            1
LemiWink             2
ChinaLTD             3
GrowsInvest          4

我认为转换没有问题(我们真的不知道这对你来说意味着什么)它存储过程:

 create or replace procedure proc_mark_jones(p_test out sys_refcursor) as
 begin
   OPEN p_test FOR   
     with tbl(name, id) as (
                select 'MarkJones'  name , 1 id from dual
      union all select 'LemiWink'    , 2 from dual
      union all select 'ChinaLTD'    , 3 from dual
      union all select 'GrowsInvest' , 4 from dual     
     )
     select * from tbl
     ;
 end;
 /

以下是如何使用此程序:

declare 
  x sys_refcursor;
  l_name varchar2(1000);
  l_id   number;
begin
  proc_mark_jones(x);
  IF (x IS NOT NULL)
  THEN
    LOOP
      FETCH x INTO l_name, l_id;
      EXIT WHEN x%NOTFOUND;
      DBMS_OUTPUT.PUT_LINE(l_id||'*    ' ||l_name);
    END LOOP;
    CLOSE x;
  END IF;
end;
/

1*    MarkJones
2*    LemiWink
3*    ChinaLTD
4*    GrowsInvest

PL/SQL procedure successfully completed.

...在Oracle11g上为我工作。