Tôi đang cố gắng để có được một giá trị tổng hợp với một hàm được lưu trữ trong PostreSQL như sau. Tôi đã tạo một loại có tên là PersonId và tôi đã sử dụng loại trong bảng có tên là Person.PostgreSQL: cách trả về kiểu hỗn hợp
Và tôi đã chèn các giá trị vào bảng.
CREATE TYPE PersonId AS
(
id VARCHAR(32),
issuer VARCHAR(32)
);
CREATE TABLE Person
(
key INTEGER,
pid PersonId
);
INSERT INTO Person VALUES (1, ('111','ABC'));
INSERT INTO Person VALUES (2, ('222','DEF'));
CREATE OR REPLACE FUNCTION Person_lookup_id
(
p_key IN Person.key%TYPE
)
RETURNS Person.pid%TYPE
LANGUAGE plpgsql
AS $BODY$
DECLARE
v_pid Person.pid%TYPE;
BEGIN
SELECT pid INTO v_pid
FROM Person
WHERE key = p_key;
RETURN v_pid;
EXCEPTION
WHEN no_data_found THEN
RETURN NULL;
END;
$BODY$;
Tuy nhiên, kết quả khác với những gì tôi đã mong đợi.
Thực ra tôi dự kiến giá trị 111 sẽ ở cột id và ABC trong cột tổ chức phát hành. Nhưng 111 và ABC được kết hợp trong cột id.
# select person_lookup_id(1);
person_lookup_id
------------------
("(111,ABC)",)
(1 row)
# select * from person_lookup_id(1);
id | issuer
-----------+--------
(111,ABC) |
(1 row)
Tôi đã sai ở đâu?
Side note - bạn không cần phải bắt 'ngoại lệ no_data_found'. Theo postgres mặc định sẽ không ném nó. –