inf*_*rno 4 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[]
)
Run Code Online (Sandbox Code Playgroud)
我因此遇到语法错误,但我不想复制任何列类型,所以我想使用"user".user_id % TYPE而不是仅仅INT因为这样以后修改任何列类型会更容易。
正如手册在这里解释的那样:
列的类型通过写 table_name.column_name%TYPE 来引用。使用此功能有时有助于使函数独立于表定义的更改。
可以在RETURNS子句中使用相同的功能。
但是没有从引用的列派生数组类型的简单方法,至少我不知道。
关于modifying any column type later:
您是否知道这种类型的语法只是从表列派生类型的语法上的便利?一旦创建,就没有任何指向所涉及的表或列的链接。
它有助于保持整个创建脚本同步。但是 id 对以后对数据库中活动对象的更改没有帮助。
dba.SE 上的相关答案:
在函数的参数中使用引用类型没有意义(在 PostgreSQL 中),因为它中间转换为实际类型,并且存储为实际类型。抱歉,PostgreSQL 不支持此功能 - 在函数内部使用引用类型有所不同,在会话中每次第一次执行时都会检测到实际类型。
| 归档时间: |
|
| 查看次数: |
5023 次 |
| 最近记录: |