2009-08-10 66 views
0

我以前使用過這種類型的功能,但是MSSQL卻無法使它適用於Oracle,所有提示?Oracle查詢幫助 - 使用TOAD

DECLARE 
    MY_TBL NUMBER := 1; 

BEGIN 

    IF(MY_TBL > 0) THEN 
     SELECT * FROM MY_TBL ORDER BY MY_TBL_ID DESC; 
    END IF; 
END; 

我想要的是一個標誌變量設置爲零或一個,如果顯示結果,如果零跳過。這只是一個簡單的腳本,可以將所有的表和選擇語句放在一個腳本中,並標記出我需要查看結果的腳本。所以如果我有5張桌子,我會使用ELSIF功能添加更多像這樣的

DECLARE 
    MY_TBL1 NUMBER := 1; 
    MY_TBL2 NUMBER := 1; 

BEGIN 

    IF(MY_TBL1 > 0) THEN 
     SELECT * FROM MY_TBL1 ORDER BY MY_TBL1_ID DESC; 
    ELSIF(MY_TBL2 > 0) THEN 
     SELECT * FROM MY_TBL2 ORDER BY MY_TBL2_ID DESC; 
    END IF; 
END; 

等等。感謝有這方面的幫助, --Phill

編輯:

以下是我有:

VAR result_set REFCURSOR 

DECLARE 
    my_tbl_1 NUMBER := 1; 
    my_tbl_2 NUMBER := 0; 
    my_tbl_3 NUMBER := 0; 
BEGIN 
    IF (my_tbl_1 > 0) 
    THEN 
     BEGIN 
     OPEN :result_set FOR 
      SELECT * 
       FROM my_tbl_1 
      ORDER BY my_tbl_1_id DESC; 
     END; 
    ELSIF (my_tbl_2 > 0) 
    THEN 
     BEGIN 
     OPEN :result_set FOR 
      SELECT * 
       FROM my_tbl_2 
      ORDER BY my_tbl_2_id DESC; 
     END; 
    ELSIF (my_tbl_3 > 0) 
    THEN 
     BEGIN 
     OPEN :result_set FOR 
      SELECT * 
       FROM my_tbl_3 
      ORDER BY my_tbl_3_id DESC; 
     END; 
    END IF; 
END; 

PRINT result_set 

回答

1

Oracle不能從存儲過程返回結果集爲SQL Server一樣。

申報cliend端遊標變量,並返回到他們:

要顯示SQL*Plus光標:

VAR cur1 REFCURSOR 

DECLARE 
     MY_TBL1 NUMBER := 1; 
     MY_TBL2 NUMBER := 1; 

BEGIN 
     IF(MY_TBL1 > 0) THEN 
     BEGIN 
       OPEN :cur1 
       FOR 
       SELECT * 
       FROM MY_TBL1 
       ORDER BY 
         MY_TBL1_ID DESC; 
     END; 
     ELSIF (MY_TBL2 > 0) THEN 
     BEGIN 
       OPEN :cur1 
       FOR 
       SELECT * 
       FROM MY_TBL2 
       ORDER BY 
         MY_TBL2_ID DESC; 
     END; 
     END IF; 
END; 
/

PRINT cur 
+0

我一直在尋找在CURSOR,但它顯示到屏幕上? – 2009-08-10 15:01:06

+1

你是什麼意思的「它」?變量不顯示在客戶端應用程序的屏幕上。在'SQL * Plus'中,你可以聲明'CURSOR'變量和'PRINT'它。 – Quassnoi 2009-08-10 15:04:58

+0

it =結果集 – 2009-08-10 15:14:50