Vấn đề là bạn đang truyền một tham số (db_row
) thuộc loại record
cho một câu lệnh SQL, nhưng một giá trị như vậy không có cấu trúc nào được biết đến cho công cụ SQL. Bạn thậm chí không thể truyền nó sang loại bảng.
Một cách giải quyết tồi tệ mà tôi có thể nghĩ ra đó là truyền bản ghi sang biểu diễn văn bản của nó (hoạt động với lệnh gọi hàm xuất kiểu) và sau đó truyền thử nghiệm sang loại bảng mong muốn.
Đây là mã mẫu minh họa ý tôi muốn nói:
DO $$
DECLARE
r record;
n name;
BEGIN
/* find all tables with a column "oid" */
FOR r IN
SELECT t.*
FROM pg_class t
JOIN pg_attribute a ON a.attrelid = t.oid
WHERE a.attname = 'oid'
LOOP
/* get the table name */
EXECUTE format(
'SELECT ($1::text::%s).relname',
'pg_class'
) INTO n USING r;
RAISE NOTICE 'Table name: %', n;
END LOOP;
END;
$$;