2014-09-26 52 views
0

需要編寫下面的查詢與在程序(參數使用)如何從子句編寫存儲過程

SELECT * 
    FROM (SELECT a.ID, 
       b.table_name, 
       b.creation_date, 
      RANK() OVER (PARTITION BY b.table_name ORDER BY b.creation_date desc) as date_ranking 
    FROM xxc_history a, 
      xxc_history_details b 
    WHERE a.ID = b.ID 
      AND name = P_NAME) 
    WHERE date_ranking = 1; 

,我需要調用一些地方這個過程。我使用 Oracle數據庫11g企業版發佈11.1.0.7.0 - 64位生產

+0

您可以在查詢中調用函數,但不能調用過程。 – 2014-09-26 06:41:19

+0

感謝您的回覆,這是顯示所有行和記錄.. :) – Rajesh123 2014-09-26 06:44:32

+0

這與Oracle表單查詢有關,我需要在程序或函數中編寫,並需要調用ORACLE表單中按鈕的那些程序 – Rajesh123 2014-09-26 06:54:57

回答

0

您可以編寫一個函數此查詢並返回結果集作爲sysrefcursor

REFCURSOR方法的一個例子給出如下:

create or replace function f_example (p_name varchar2) return sys_refcursor is 

    v_sysrefcursor sys_refcursor; 

    Begin 
    open v_sysrefcursor for (SELECT * 
           FROM (SELECT a.ID, 
           b.table_name, 
           b.creation_date, 
           RANK() OVER (PARTITION BY b.table_name ORDER BY    b.creation_date desc) as date_ranking 
          FROM xxc_history a, 
            xxc_history_details b 
          WHERE a.ID = b.ID 
          AND name = P_NAME) 
          WHERE date_ranking = 1); 

          return v_sysrefcursor; 
    end f_example ; 

調用這個函數在另一個程序p_calling_proc:

create or replace procedure p_calling_proc 
    is 

    v_sysrefcursor sys_refcursor; 
    v_name varchar2(32); 

    begin 
    v_name :='Vishad'; 

    v_sysrefcursor :=f_example(v_name); 

end p_calling_proc; 

希望它可以幫助

Vishad

+0

嗨,這是我傳遞「AND name = P_NAME」的參數,我必須使用IN參數 – Rajesh123 2014-09-26 07:12:18

+0

,並且需要在另一個過程中調用此函數/過程 – Rajesh123 2014-09-26 07:13:08