PL/pgSQL - %TYPE 和 ARRAY

问题描述 投票:0回答:2

%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
因为这样以后修改任何列类型会更容易。

postgresql plpgsql
2个回答
8
投票

说明书:

列的类型通过写来引用

table_name.column_name%TYPE
。使用此功能有时会有所帮助 使函数独立于表定义的更改。

可以在

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

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

关于

modifying any column type later

您是否知道这种类型的语法只是从表列派生类型的语法便利?创建后,与所涉及的表或列没有任何链接

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

dba.SE上的相关答案:


5
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.