Database-Design
循環遍歷表類型變數
我有一個具有表類型參數的函式,我想遍歷所有欄位並返回具有空值或空值的列。
CREATE OR REPLACE FUNCTION toned.function_validate(varmember tbl_member) RETURNS text AS $BODY$ ...
tbl_member
下面的定義CREATE TABLE toned.tbl_member ( code smallint NOT NULL DEFAULT nextval('toned.seq_code'::regclass), name text NOT NULL, email text, address text, city text, country text );
誰能幫我遍歷變數?我不知道如何引用欄位名稱。我可以做類似的事情
varmember[0]
嗎?
通常我會盡可能多地使用表定義中的聲明性內容。如果我不能只相信我的應用程序能夠正常檢測和處理標準異常,那麼我可以使用異常塊。
由於 plpgsql 表達能力的限制,在 plpgsql 中做你想做的事情可能會非常困難。雖然我們可以找到屬性,但如果不求助於臨時表等,就不可能生成查詢來檢查它們。所以讓我們談談臨時表作為一種選擇。你可以:
CREATE TEMPORARY TABLE temp_tblmember OF TYPE toned.tbl_member;
然後你可以將它插入到那個臨時表中。
然後您可以在 pg_attribute 中查找屬性(在 pg_attribute.relid = pg_class.oid 上加入 pg_class)。然後你可以使用 EXECUTE 來檢查屬性。
不幸的是,這不太可能表現得很好,並且編碼可能非常麻煩。
幸運的是,您可以考慮使用 pl/perl 進行循環,您可以在其中訪問,然後循環遍歷 hashref 的鍵。
CREATE OR REPLACE FUNCTION validate(tbl_member) returns int immutable language plperl as $$ my ($ref) = @_; for my $k (keys %$ref){ if (!defined $ref->{$k}){ elog(ERROR, 'tbl_member.' . $k . ' not defined!'); } } return 1; $$;