postgresql - PL/pgSQL - %TYPE 和 ARRAY

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

最佳答案

如手册所述here :

The type of a column is referenced by writing table_name.column_name%TYPE. Using this feature can sometimes help make a function independent of changes to the definition of a table.

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

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

关于稍后修改任何列类型:
您知道这种类型的语法只是从表列派生类型的语法便利吗?创建后,没有任何链接到所涉及的表或列。

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

dba.SE 上的相关回答:

关于postgresql - PL/pgSQL - %TYPE 和 ARRAY,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17659995/

相关文章:

postgresql - 内部加入 postgresql

ruby-on-rails - Heroku rake 数据库 :schema:load table does not exist

sql - 模型 M :N relationship in SQL where parent may be one of many types 的正确方法

java - 我应该有一个数据库连接还是每个任务一个连接?

Postgresql plpgsql函数语法错误

postgresql - Postgres 存储函数可以同时具有返回值和输出参数吗?

sql-server - 如何确定SSIS转换中的错误行/列

sql - 删除列和列计数的冗余函数调用

sql - 如何在 Postgres 9.1+ 函数中使用混合的 int 和数字参数

sql - Postgres,plpgsql : Is there a way to connect to other DB from inside of a stored procedure?