Postgresql

如何將查詢結果放入變數中?

  • February 27, 2015

我寫了一個 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,基本上可以取任意結構的一行,常用的有like

DECLARE
   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 ... ;

有時,當視圖仍然有意義時(例如,查詢出現在多個函式中),這可能是一種更方便的方式。但是,您引入了一個額外的依賴項,這使得更改邏輯變得更加困難。

引用自:https://dba.stackexchange.com/questions/93747