簡體   English   中英

在 Oracle SQL Developer 中聲明綁定變量

[英]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
            )
        )

在 oracle sql 開發者中輸入的參數

誰能告訴我哪一部分是錯的?

謝謝你。

這是我成功執行的查詢和PO_HEADER_ID的數據類型

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM