簡體   English   中英

如何在存儲過程中創建記錄和該記錄的表?

[英]How Can I Create Record and Table of That Record Within a Stored Procedure?

在Oracle 10g中,我嘗試了這種方法,但是編譯存在問題。 我不明白問題出在哪里。 請幫忙...

create or replace procedure get_degree(ver char) as   
declare    
  type edge_data is record    
  (    
     vertex1 varchar2(10),    
     vertex2 varchar2(10)    
  );    
  ed edge_data;    
  type e_d_t is table of edge_data index by pls_integer;    
  edt e_d_t;    
  n integer;    
  deg integer;     
begin    
  select max(rn) into n 
  from (  select rownum rn,vertex1,vertex2 from edges 
          where vertex1=ver or vertex2=ver
  );    
  for i in 1..n loop     
     select vertex1,vertex2 into ed 
     from (  select rownum rn,vertex1,vertex2 from edges 
             where vertex1=ver or vertex2=ver
     ) 
     where rn=i;    
     edt(i):=ed;    
     if edt(i).vertex1=ver then    
        select degree into deg from vertices 
        where ver_name=edt(i).vertex2;    
        dbms_output.put_line(edt(i).vertex2||'='||deg);    
     else    
        select degree into deg from vertices 
        where ver_name=edt(i).vertex1;    
        dbms_output.put_line(edt(i).vertex1||'='||deg);    
     end if;    
  end loop;    
end;    
/    

警告:程序創建時出現編譯錯誤.....

要解決編譯錯誤,只需在第二行中刪除DECLARE語句即可。

但是,您可以大大簡化代碼:

CREATE OR REPLACE PROCEDURE get_degree(ver CHAR)
AS
  TYPE vertex_data IS RECORD    
  (    
     ver_name Vertices.Ver_Name%TYPE,    
     degree   Vertices.Degree%TYPE    
  );    
  TYPE vertex_data_table IS TABLE OF vertex_data;    
  vdt vertex_data_table;
BEGIN
  SELECT ver_name,degree 
  BULK COLLECT INTO vdt
  FROM   vertices v
  WHERE  ver_name <> ver
  AND    EXISTS ( SELECT 'X'
                  FROM   Edges e
                  WHERE  ( e.Vertex1 = ver AND e.Vertex2 = v.Ver_Name )
                  OR     ( e.Vertex2 = ver AND e.Vertex1 = v.Ver_Name )
                );

  FOR i IN 1..vdt.COUNT LOOP 
    dbms_output.put_line(vdt(i).ver_name||'='||vdt(i).degree);
  END LOOP;
END get_degree;
/

(假設您在圖形中沒有循環邊,或者對返回輸入頂點的度數不感興趣)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM