Postgresql
如何將查詢結果放入變數中?
我寫了一個 Postgres 匿名塊。我在其中編寫了多個表的連接查詢,例如:
select a.portal.*, a.p_fb_config.*, a.p_gplus_config from a.portal left outer join a.p_fb_config on a.portal.pid = a.p_fb_config.pid left outer join a.p_gplus_config on a.portal.pid = a.p_gplus_config.pid;
現在我想在變數中擷取這個值。那麼我應該如何聲明該變數呢?
我需要類似的東西:
portal_row a.portal%ROWTYPE;//for 3 tables
我假設您使用的是 pl/pgsql 塊(可能是一個函式)。
對於泛型情況,可以使用
record
,基本上可以取任意結構的一行,常用的有likeDECLARE i record; BEGIN FOR i IN SELECT this, that, something, else FROM some_table LOOP ... END LOOP;
也可以定義一個視圖:
CREATE VIEW v_portal_data_with_config AS select a.portal.*, a.p_fb_config.*, a.p_gplus_config -- note that this does not work straight away, there will be a column naming collision, -- so you'll have to add column aliases (which then makes using * impossible) from a.portal left outer join a.p_fb_config on portal.pid = p_fb_config.pid left outer join a.p_gplus_config on portal.pid = p_gplus_config.pid;
有了這個,你就可以
DECLARE i v_portal_data_with_config%ROWTYPE; BEGIN SELECT * FROM v_portal_data_with_config WHERE ... ;
有時,當視圖仍然有意義時(例如,查詢出現在多個函式中),這可能是一種更方便的方式。但是,您引入了一個額外的依賴項,這使得更改邏輯變得更加困難。