2017-04-20 68 views
0

我在处理plpgsql和RECORD类型时遇到了问题。Postgresql - 测试记录类型(对于字段或null)

有谁知道一种方法来简单地测试返回的记录类型,以知道它是否设置?

基本模式:

甲函数返回一个记录,并在那里它可以是未固化的(即,选择到没有记录返回)或它被设置为一个单个记录。

create or replace function blah() 
returns RECORD as $$ 
declare 
    rec RECORD; 
begin 
    rec := row(null); --Do not want to hear about it not being assigned 
    select *, status_field into rec ... ; 
    if found then 
     raise notice '%', rec.status_field is not null --prints 't' 
    end if 

    if not found then 
     raise notice '%', rec.status_field is not null --Throws Error (I just want it to say 'f' 
    end if; 
end; $$ 

create or replace function callblah() 
returns text as $$ 
declare 
    rtText text; 
    blahRec RECORD; 
begin 
blahRed := blah(...); 

-- what test can I do to determine if record is set or not. 
-- Try: if blah is not null then -- nope always returns false for is null and is not null 
-- Try: if blah.status is not null then -- nope throws error on field not existing 
-- What test condition do I need to add here to simply test if record is either (NOT FOUND) or (FOUND where field will exist). 
... 
end if 
end; $$ 
+0

哪个Postgres版本您使用? – McNets

回答

0

对于RECORD,Ah ..是null操作符是(所有字段为空),而不是null(所有字段都不为空)。由于我有一些字段为null,我需要做

if blah is null then 
    -- No record found 
else 
    if blah.status is not null then 
    -- Record found with field I want 
    end if; 
end if;