[SQL ] 在procedure的SQL設定條件消失

看板Database作者時間6年前 (2017/10/11 18:34), 編輯推噓0(003)
留言3則, 2人參與, 最新討論串1/1
(針對 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
輸入 1617 的時候 PI_ACCT_ID IS NOT NULL.
10/12 02:00, 1F

10/12 02:01, , 2F
所以你的where條件裡面找的是 1617 , return 0 rows.
10/12 02:01, 2F

10/12 19:50, , 3F
感謝 已經解決了
10/12 19:50, 3F
文章代碼(AID): #1PtVFFaA (Database)