簡體   English   中英

對於非整數,錯誤“整數的無效輸入語法”嗎?

[英]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和相關構造” 您的旅程結束於:

  1. 將所有輸入轉換為所選類型。 如果沒有從給定輸入到所選類型的轉換,則失敗。

由於字符串文字'WwLEA6XZ0V'無法轉換為integer

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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