![]() ![]() ![]() ![]() |
|||||
|
|||||
樓主 lueichun ![]()
![]() |
我想設計一個SQL 是可以根據參數值的有無 決定條件是甚麼 以下是Procedure: PROCEDURE PC_QRY_ADJ_DATA( PI_ACCT_ID IN VARCHAR2, PO_OPER_CUR OUT SYS_REFCURSOR, PO_ERR_CDE OUT VARCHAR2, PO_ERR_MSG OUT VARCHAR2) AS CH_BREAK_POINT VARCHAR2(100); BEGIN CH_BREAK_POINT := 'INITIAL CURSOR'; OPEN PO_OPER_CUR FOR SELECT ad.ACCT_ID ACCT_ID FROM SB_TB_ADJUSTMENT ad WHERE ad.ACCT_ID IN (CASE WHEN PI_ACCT_ID IS NOT NULL THEN PI_ACCT_ID ELSE (SELECT ACCT_ID FROM SE_TB_OPERATOR) END); CH_BREAK_POINT := '處理回傳值'; PO_ERR_CDE := '00'; PO_ERR_MSG := NULL; END; END SB_PK_ADJUSTMENT; 黃字部分是SQL ------------------------------------------------------- 而我用以下的CODE來測試: set serveroutput on; DECLARE acct_id VARCHAR2(10); PO_OPER_CUR SYS_REFCURSOR; PO_ERR_CDE VARCHAR2(100); PO_ERR_MSG VARCHAR2(100); BEGIN SB_PK_ADJUSTMENT.PC_QRY_ADJ_DATA('1616',PO_OPER_CUR,PO_ERR_CDE,PO_ERR_MSG); LOOP FETCH PO_OPER_CUR INTO acct_id; EXIT WHEN PO_OPER_CUR%NOTFOUND; dbms_output.put_line('acct_id = '||acct_id); END LOOP; END; ----------------------------------------------------------------------- 若我輸入的參數是存在在資料庫的 例如上面綠色部分 執行procedure時 餵入的1616 則結果正常 但如果我餵入的參數不存在於資料庫 例如參數改成1617 則不會出現任何結果 只會顯示 匿名區塊已完成 我的SQL的意思 是指如果輸入參數 也就是PI_ACCT_ID存在的話 則ACCT_ID是PI_ACCT_ID 如果輸入參數 也就是PI_ACCT_ID不存在的話 則ACCT_ID就是資料庫內所有的ACCT_ID值 所以這SQL應該要能找出表格內所有ACCT_ID 但現在是不會出現任何結果 只會顯示 匿名區塊已完成 請問要怎麼修改呢 |