我在PostgreSQL中创建了以下存储过程:
CREATE OR REPLACE function incomingdel(IN del_ID varchar) RETURNS VOID AS $$
DECLARE xyz integer;
BEGIN
SELECT * INTO xyz FROM incomingcheck(cast(del_ID as integer));
IF xyz <> 1
THEN
SELECT * INTO xyz FROM perfdel(cast(del_ID as integer));
END IF;
END
$$ LANGUAGE plpgsql
即使函数返回VOID,我仍然会得到
Error: query has no destination for result data
当我执行该功能时。有人可以帮忙吗?
由于
答案 0 :(得分:0)
当你在PL / pgSQL函数中执行SELECT * INTO ...
时,你需要提供类型record
的变量或行源的行类型,即使该函数只返回一个整数。函数incomingcheck(int)
和perfdel(int)
显然会返回一个integer
,在这种情况下,您可以简化您的功能:
CREATE FUNCTION incomingdel(del_ID integer) RETURNS VOID AS $$
DECLARE
xyz integer;
BEGIN
xyz := incomingcheck(del_ID);
IF xyz <> 1 THEN
xyz := perfdel(del_ID);
END IF;
-- Do something with xyz
END; $$ LANGUAGE plpgsql;
如果功能实际上在被调用函数中(因此您不处理xyz
值),那么它仍然变得更简单:
CREATE FUNCTION incomingdel(del_ID integer) RETURNS VOID AS $$
BEGIN
IF incomingcheck(del_ID) <> 1 THEN
perfdel(del_ID);
END IF;
END; $$ LANGUAGE plpgsql;