Postgresql

將變數作為輸入參數傳遞給 PostgreSQL 中另一個函式內的函式

  • January 31, 2021

我是 PostgresQL 的新手,在為函式提供外部函式的變數時遇到了一些麻煩。(也許不可能……)

在一個函式內部,我試圖通過呼叫另一個函式來分配一個值,如下所示:left_bipolar_n:=public.convert_to_decimal(left_bipolar);

當我呼叫該函式時,如果我使用“122”之類的東西而不是“left_bipolar”作為參數,它工作得很好,但正如我得到的那樣:錯誤:數字類型的輸入語法無效:“”

我應該說 Function convert_to_decimal 需要文本

完整程式碼:

-- FUNCTION: public.AmateurExercise(numeric)
--drop FUNCTION public."AmateurExercise"(numeric);

CREATE OR REPLACE FUNCTION public."AmateurExercise"(
   n numeric)
   RETURNS numeric
   LANGUAGE 'plpgsql'
   COST 100
   VOLATILE PARALLEL UNSAFE
AS $BODY$
declare 
bipolar text;
tamanho integer;
left_bipolar text;
right_bipolar text;
left_bipolar_n numeric;
right_bipolar_n numeric;

begin
bipolar:=public.convert_to_bipolar8(n);
tamanho=length(bipolar);
if tamanho/2 =floor (tamanho/2) then 
begin
left_bipolar=left(bipolar,tamanho/2);
right_bipolar=right(bipolar, tamanho/2);
end;
else
left_bipolar=left(bipolar,(tamanho-1)/2);
right_bipolar=right(bipolar, ((tamanho-1)/2)+1);
end if;

left_bipolar_n:=public.convert_to_decimal(left_bipolar);
return left_bipolar_n;

end;
$BODY$;

ALTER FUNCTION public."AmateurExercise"(numeric)
   OWNER TO postgres;

jjanes 評論的回答:

“該錯誤表明由於某種原因 left_bipolar 在呼叫之前包含一個空格。我猜 convert_to_bipolar8 必須將空格放在那裡。但是我們看不到它的程式碼,而不是您呼叫外部函式的輸入”

引用自:https://dba.stackexchange.com/questions/284304