[英]Error “invalid input syntax for integer” for a non-integer?
我正在使用Python和psycopg2。
我試圖執行一個准備好的語句,其中包含值列表:
cur.callproc(prepared_func, prepared_values)
psycopg2.DataError: invalid input syntax for integer: "WwLEA6XZ0V"
LINE 1: ... fn_approve_external_lead(ARRAY[1004, 2, 1079412, 'WwLEA6XZ0...
Postgres中的函數如下所示:
CREATE OR REPLACE FUNCTION fn_approve_external_lead(
internal_usrid bigint
, ofr_src_id bigint
, ofr_ext_id varchar
, puuid varchar
, paid varchar
, p_note varchar DEFAULT '') ...
據我所知,我正在將一個非整數值放入一個非整數參數中,因此它應該起作用,但是由於某種原因,它認為該值是一個整數?
是什么原因造成的?
您甚至在進入函數類型解析之前,輸入都會失敗,並在ARRAY構造函數中出現語法錯誤-在刪除所有根本不應該包含在調用中的ARRAY構造函數之后,由於其他類型不匹配,您將收到更多錯誤消息。
您的解決方案是傳遞匹配類型的單獨參數 , 而不是數組。 剩下的只是對我們所見內容的解釋。
數組只能包含相同類型的值,但您的輸入將數字常量與無法解析的非數字字符串文字混合在一起。
如果要使其解析為text[]
( text
數組),則必須提供如下字符串文字:
SELECT ARRAY['1004', '2', '1079412', 'WwLEA6XZ0'];
或直接使用數組文字,如下所示:
SELECT '{1004, 2, 1079412, WwLEA6XZ0}'::text[];
但是,一旦使用數字常量啟動了ARRAY構造函數,就只能添加數字類型了。 或至少包含可強制轉換為相同類型的內容的字符串文字。 您可以 :
SELECT ARRAY[1004, 2, 1079412, '1'];
...導致int[]
。 要么:
SELECT ARRAY[1004, 2, 1079412, 1.0];
甚至:
SELECT ARRAY[1004, 2, 1079412.0, '1.0'];
...兩者都導致numeric[]
。
但是,
是非法的,這是正確的。 ARRAY[1004, 2, 1079412, 'WwLEA6XZ0V']
可以在手冊的這一章中找到數組構造函數的類型解析的確切規則: “類型轉換”-“ UNION,CASE和相關構造” 。 您的旅程結束於:
- 將所有輸入轉換為所選類型。 如果沒有從給定輸入到所選類型的轉換,則失敗。
由於字符串文字'WwLEA6XZ0V'無法轉換為integer
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.