2017-04-20 10 views
0

plpgsqlとRECORDタイプの処理に問題があります。Postgresql - レコードタイプのテスト(フィールドまたはnullの場合)

返されたRECORD型をテストして、それが設定されているかどうかを知る方法を知っている人はいますか?

基本パターン:

関数がレコードを返し、それが未設定であってもよい場合(即ち返さないレコードに選択)か、単一のレコードに設定されています。

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

Ah ..はRECORDでnull演算子(すべてのフィールドが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; 
関連する問題