【发布时间】:2011-11-29 21:16:38
【问题描述】:
问题:如何在存储函数中声明同类型的变量作为参数?
简单的答案是使用%TYPE,这样可以:
CREATE OR REPLACE FUNCTION test_function_1(param1 text)
RETURNS integer AS
$BODY$
DECLARE
myVariable param1%TYPE;
BEGIN
return 1;
END;
$BODY$
LANGUAGE plpgsql VOLATILE
COST 100;
但问题是当param1 是复合类型时:
CREATE TYPE comp_type as
(
field1 text
)
CREATE OR REPLACE FUNCTION test_function_2(param1 comp_type)
RETURNS integer AS
$BODY$
DECLARE
myVariable param1%TYPE;
BEGIN
return 1;
END;
$BODY$
LANGUAGE plpgsql VOLATILE
COST 100;
这不起作用:
ERROR: type comp_type does not exist [SQL State=42704]
那么当param1是复合类型时我该怎么办呢?
(注意:仅myVariable comp_type 不是一个好选择,因为我的函数稍微更复杂。)
编辑: 我在复制和粘贴时出错,真正的错误是:
ERROR: invalid type name "param1%TYPE"
Position: 130 [SQL State=42601]
而使用param1%ROWTYPE 的错误是:
ERROR: relation "param1" does not exist
Where: compilation of PL/pgSQL function "test_function_2" near line 3 [SQL State=42P01]
【问题讨论】:
标签: postgresql stored-procedures types polymorphism plpgsql