[SQL ] 在procedure的SQL設定條件消失
(針對 SQL 語言的問題,用這個標題。請用 Ctrl+Y 砍掉這行)
資料庫名稱:ORACLE
資料庫版本:12G
內容/問題描述:
我想設計一個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
但現在是不會出現任何結果 只會顯示 匿名區塊已完成
請問要怎麼修改呢
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 59.120.148.217
※ 文章網址: https://www.ptt.cc/bbs/Database/M.1507718095.A.90A.html
→
10/12 02:00, , 1F
10/12 02:00, 1F
→
10/12 02:01, , 2F
10/12 02:01, 2F
→
10/12 19:50, , 3F
10/12 19:50, 3F