是否可以同时使用%TYPE和数组?
CREATE FUNCTION role_update(
IN id "role".role_id % TYPE,
IN name "role".role_name % TYPE,
IN user_id_list "user".user_id % TYPE[],
IN permission_id_list INT[]
)
我得到了语法错误,但我不想复制任何列类型,因此我想使用"user".user_id % TYPE
而不是简单INT
,因为这样可以更容易地修改任何列类型后面。
答案 0 :(得分:4)
正如手册解释here:
通过编写table_name.column_name%TYPE来引用列的类型。使用此功能有时可以帮助使函数独立于对表的定义的更改。
RETURNS
子句中可以使用相同的功能。
但是没有简单的方法从引用的列派生数组类型,至少没有我知道的。
关于modifying any column type later
:
您知道这种类型的语法只是从表列派生类型的语法方便吗?创建后,所涉及的表或列无任何链接。
有助于保持整个创建脚本同步。但是id对以后对数据库中活动对象的更改没有帮助。
关于dba.SE的相关答案:
答案 1 :(得分:4)
在函数的参数中使用引用类型是没有意义的(在PostgreSQL中),因为它在中间转换为实际类型,并且它被存储为实际类型。抱歉,PostgreSQL不支持此功能 - 不同的是在函数内部使用引用类型,其中每次第一次在会话中执行时都会检测实际类型。