PL / pgSQL - %TYPE和ARRAY

时间:2013-07-15 17:18:24

标签: postgresql plpgsql

是否可以同时使用%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,因为这样可以更容易地修改任何列类型后面。

2 个答案:

答案 0 :(得分:4)

正如手册解释here

  

通过编写table_name.column_name%TYPE来引用列的类型。使用此功能有时可以帮助使函数独立于对表的定义的更改。

RETURNS子句中可以使用相同的功能。

但是没有简单的方法从引用的列派生数组类型,至少没有我知道的。

关于modifying any column type later
您知道这种类型的语法只是从表列派生类型的语法方便吗?创建后,所涉及的表或列无任何链接

有助于保持整个创建脚本同步。但是id对以后对数据库中活动对象的更改没有帮助。

关于dba.SE的相关答案:

答案 1 :(得分:4)

在函数的参数中使用引用类型是没有意义的(在PostgreSQL中),因为它在中间转换为实际类型,并且它被存储为实际类型。抱歉,PostgreSQL不支持此功能 - 不同的是在函数内部使用引用类型,其中每次第一次在会话中执行时都会检测实际类型。