Postgresql 返回元组并检查null
我有一个函数:Postgresql 返回元组并检查null,postgresql,stored-procedures,types,plpgsql,postgresql-9.2,Postgresql,Stored Procedures,Types,Plpgsql,Postgresql 9.2,我有一个函数: CREATE OR REPLACE FUNCTION my_function(user_id BIGINT) RETURNS BIGINT AS $BODY$ DECLARE var1 ???; --- ??? BEGIN --1 var1 := (SELECT table1.field1, table2.field2 FROM table1 INNER JOIN table2 -- ...... ); --2 --if var
CREATE OR REPLACE FUNCTION my_function(user_id BIGINT) RETURNS BIGINT AS
$BODY$
DECLARE
var1 ???; --- ???
BEGIN
--1
var1 := (SELECT table1.field1, table2.field2
FROM table1
INNER JOIN table2
-- ......
);
--2
--if var1 is not null...
首先,我希望var1
是一个元组。我必须创建一个像这样的类型我接受了吗
CREATE TYPE my_type ....
哪个有两个字段?或者有更好的办法解决这个问题
其次,我想确保var1
不为null。如何做到这一点?您可以选择或使用现有表的类型。然后使用返回my_类型的集合
但对于一个行类型,您只需要在单个函数中使用它更方便-可能与以下组合使用:
在标签中搜索那些关键字。有很多例子
CREATE OR REPLACE FUNCTION my_function(user_id bigint)
RETURNS TABLE(field1 int, field2 text) AS -- replace with actual types!
$func$
BEGIN
RETURN TABLE
SELECT t1.field1, t2.field2 -- table-qualify to avoid naming conflict
FROM table1 t1
JOIN table2 t2 ON ...
... ;
-- if var1 is not null ...
IF NOT FOUND THEN
-- If nothing was found, you can ...
-- RAISE EXCEPTION 'foo!' -- to raise an exception. Or ...
-- RETURN QUERY SELECT 1, 'foo'; -- return a "default" row ...
END IF;
END
$func$ LANGUAGE plpgsql;