私の関数で複合配列型にデータを挿入しようとしています。それは、複合配列タイプのINPUTパラメータからのデータを受け入れ、同じタイプのOUPUTパラメータにデータを格納する必要があります。PostgreSQLのOUTPUTパラメータとしての複合配列型
CREATE TYPE public.type_x_type AS (x integer);
CREATE TYPE public.type_y_type AS(x integer,y integer);
My機能は
CREATE OR REPLACE FUNCTION GET_PRICE_PC_X
(
IP_PRICE_INFO IN TYPE_X_TYPE[],
PC_COST OUT TYPE_Y_TYPE[],
OP_RESP_CODE OUT VARCHAR,
OP_RESP_MSG OUT VARCHAR
)
RETURNS RECORD AS $$
DECLARE
SELECTED_PRICE CURSOR(IP_PFCNTR INT)
FOR
SELECT ID, PHONE FROM CUSTOMER WHERE ID=IP_PFCNTR;
J NUMERIC(10);
BEGIN
J := 0;
FOR I IN ARRAY_LOWER(IP_PRICE_INFO,1) .. ARRAY_UPPER(IP_PRICE_INFO,1)
LOOP
FOR K IN SELECTED_PRICE(IP_PRICE_INFO[I].X)
LOOP
PC_COST := ROW(K.ID,K.PHONE);
END LOOP;
END LOOP;
OP_RESP_CODE :='000';
OP_RESP_MSG :='Success';
EXCEPTION
WHEN OTHERS THEN
OP_RESP_CODE :='200';
OP_RESP_MSG :=SQLERRM;
END;
$$ language 'plpgsql';
select * from GET_PRICE_PC_X(ARRAY[ROW(1)] :: TYPE_X_TYPE[]);
であり、私は以下のエラーを取得しています。
PC_COST | OP_RESPONSE_CODE | OP_RESP_MSG
---------------------------------------------------------
| 200 | malformed array literal: "(1,30003)"
私はそのOUT型をどこかで呼び出すことになるので、配列にデータを挿入する必要があります。
こんにちはパベルは、あなたが実際に私のコードを不必要なもので安く見せてくれました。 :)とにかく助けてくれてありがとう。一つの質問があります。出力から1列にアクセスするにはどうすればよいですか?私の出力は "{"(31,23423423) "、"(1,300074321) "}"のようになります。そしてなぜPC_COST:= '{}';それは何かを初期化するのと同じですか? – user1720827
(アンネスト(結果))。 '{}'は空の配列の特殊なリテラルです。 PC_COSTのデフォルトはNULLで、NULL + anyはNULLです。したがって、PC_COSTは空の配列に初期化する必要があります。 - '{}' –