내 함수에서 복합 배열 유형에 데이터를 삽입하려고합니다. 복합 배열 형식의 INPUT 매개 변수에서 데이터를 받아 들여 데이터를 동일한 유형의 OUPUT 매개 변수에 저장해야합니다.PostgreSQL의 OUTPUT 매개 변수로 복합 배열 유형
CREATE TYPE public.type_x_type AS (x integer);
CREATE TYPE public.type_y_type AS(x integer,y integer);
내 기능은
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 유형을 어딘가에 불러올 것이므로 데이터를 배열에 삽입해야합니다.
안녕 파벨, 당신 정말 내 코드를 깔끔하게 보이게 만들었습니다. :) 어쨌든 도와 줘서 고마워. 질문이 하나 있습니다. 출력에서 한 열에 액세스하려면 어떻게해야합니까? 내 출력은 "{"(31,23423423) ","(1,300074321) "}"처럼 보입니다. 그리고 왜 PC_COST : = '{}'; 그것은 intializing 뭔가 같은 것입니다. – user1720827
(중첩 (결과)). 필드; '{}'은 빈 배열에 대한 특수 리터럴입니다. PC_COST의 기본값은 NULL이고 NULL + any는 다시 NULL입니다. 따라서 PC_COST는 빈 배열로 초기화되어야합니다. - '{}' –