台灣最大程式設計社群網站
線上人數
1727
 
會員總數:240909
討論主題:186667
歡迎您免費加入會員
討論區列表 >> Oracle >> 在procedure的SQL設定條件
[ 變換順序 ]  
[我要回覆]
回應主題 加入我的關注話題 檢舉此篇討論 將提問者加入個人黑名單
在procedure的SQL設定條件
價值 : 20 QP  點閱數:72 回應數:0

樓主

lueichun
門外漢
0 1
8 0
發送站內信



我想設計一個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

但現在是不會出現任何結果 只會顯示 匿名區塊已完成

請問要怎麼修改呢



搜尋相關Tags的文章: [ oracle ] , [ sql ] ,
本篇文章發表於2017-10-11 18:47
別忘捐VP感謝幫助你的人 新手會員瞧一瞧
目前尚無任何回覆
[ 變換順序 ]   

回覆
如要回應,請先登入.