【发布时间】:2020-05-15 09:27:27
【问题描述】:
我遇到了下一篇文章中定义的问题,第一个答案解决了我将参数命名为与表列同名的主要问题。我的新担心是我的函数/过程参数被广泛使用,并且我的函数/过程的名称相当详细。
PL/pgSQL column name the same as variable
有没有办法为函数或过程名称定义别名 - 以在其主体内使用?
当前代码:
CREATE OR REPLACE PROCEDURE dbo.PR_DeleteCrazyNamedItemByCrazyNamedID(in NamedID UUID)
LANGUAGE plpgsql AS
$BODY$
DECLARE
BEGIN
Delete from dbo.Table t where PR_DeleteCrazyNamedItemByCrazyNamedID.NamedID = t.NamedID;
...
所需代码:
CREATE OR REPLACE PROCEDURE dbo.PR_DeleteCrazyNamedItemByCrazyNamedID(in NamedID UUID) as proc
LANGUAGE plpgsql AS
$BODY$
DECLARE
BEGIN
Delete from dbo.Table t where proc.NamedID = t.NamedID;
...
【问题讨论】:
-
似乎在the answer that you linked to 中按字面意思回答? "最好一开始就避免这种歧义,这样更不容易出错。如果您也需要列名作为函数参数名,避免命名冲突的一种方法是在函数内使用 ALIAS。这是一个ALIAS 实际有用的极少数情况。或者您可以按序号位置引用输入参数"
-
你为什么不给参数一个不同的名字呢?例如:
(p_named_id uuid) -
@bergi 我在表名上使用了别名,而这正是我试图对函数名执行的操作。我了解最佳实践,我只是想问问这样的事情是否存在。
-
函数名没有对应的ALIAS作为表的别名。正如@a_horse_with_no_name 所说,只需给您的参数一个不同的名称。如果您不喜欢“p_xxxx”约定,请使用 in_name_id 或 name_id_in 之类的内容,或者其他适合您的内容。
-
@Bergi:还有一个棘手的细节:函数名称用作保存输入参数的记录,但
ALIAS功能本身无法访问。
标签: postgresql stored-procedures alias plpgsql