[英]Declare bind variable in the Oracle SQL Developer
我想嘗試通過 Oracle SQL Developer 執行此查詢,但我總是收到錯誤消息,即
ORA-01722: invalid number
01722. 00000 - "invalid number"
*Cause: The specified number was invalid.
*Action: Specify a valid number.
DEFINE po_header_ids VARCHAR(1000) := '1,2,3';
SELECT
PHA.SEGMENT1
FROM
PO.PO_HEADERS_ALL PHA
WHERE 1=1
AND (
:po_header_ids = 0 OR
:po_header_ids IS NULL OR
PHA.PO_HEADER_ID IN (
SELECT regexp_substr(:po_header_ids,'[^,]+',1,level)
FROM dual CONNECT BY
regexp_substr(:po_header_ids ,'[^,]+',1,level) IS NOT NULL
)
)
誰能告訴我哪一部分是錯的?
謝謝你。
這是我成功執行的查詢和PO_HEADER_ID
的數據類型
DEFINE po_header_ids varchar(1000);
SELECT regexp_substr(:po_header_ids,'[^,]+',1,level)
FROM dual CONNECT BY
regexp_substr(:po_header_ids,'[^,]+',1,level) IS NOT NULL
DEFINE
聲明了一個替換變量,該變量將在代碼中以&
為前綴,並在客戶端應用程序(即在 SQL Developer 中)中進行處理,就像在語句中發生查找替換一樣。VARIABLE
聲明了一個綁定變量,該變量將在代碼中以:
為前綴,並由服務器上的 SQL 引擎處理。 您還需要更改: :po_header_ids = 0
為:po_header_ids = '0'
因為綁定變量是字符串而不是數字。
所以你要:
VARIABLE po_header_ids VARCHAR2(1000);
BEGIN
:po_header_id := '1,2,3';
END;
/
SELECT PHA.SEGMENT1
FROM PO.PO_HEADERS_ALL PHA
WHERE :po_header_ids = '0'
OR :po_header_ids IS NULL
OR PHA.PO_HEADER_ID IN (
SELECT TO_NUMBER(regexp_substr(:po_header_ids,'[^,]+',1,level))
FROM dual
CONNECT BY
regexp_substr(:po_header_ids ,'[^,]+',1,level) IS NOT NULL
);
db<> 在這里擺弄
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.