%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
因为这样以后修改任何列类型会更容易。
列的类型通过写来引用
。使用此功能有时会有所帮助 使函数独立于表定义的更改。table_name.column_name%TYPE
可以在
RETURNS
子句中使用相同的功能。
但是没有简单的方法可以从引用的列派生数组类型,至少我不知道。
关于
modifying any column type later
:它有助于保持整个创建脚本同步。但 id 对以后对数据库中活动对象的更改没有帮助。
dba.SE上的相关答案:
在函数参数中使用引用类型没有任何意义(在 PostgreSQL 中),因为它会中间转换为实际类型,并且存储为实际类型。抱歉,PostgreSQL 不支持此功能 - 不同的是在函数内使用引用类型,其中每次在会话中第一次执行时都会检测到实际类型。