postgresql - postgresql 中存储过程参数的命名约定

标签 postgresql stored-procedures parameters

postgres 中存储过程的参数有命名约定吗?我想将参数与列名称区分开,以便于阅读,因此 Student_id (column) = s_id(parameter)、period (column) = per (参数名称)、tasking (column) = asgmt (parameter) 等..

CREATE PROCEDURE 
    insert_assignment(s_id INT, per INT, cl VARCHAR(50), ln VARCHAR(50), sp_id INT, asgmt VARCHAR(500))
LANGUAGE SQL
AS $$
    INSERT INTO 
        assignment(sped_id, assignment)
    VALUES
        (sp_id, asgmt);
    UPDATE assignment ss
    SET student_schedule_id= 
        (SELECT
            ss.student_schedule_id
            FROM 
                student_schedule ss
            LEFT JOIN
                class_teacher ct on ct.class_teacher_id=ss.class_teacher_id
            LEFT JOIN
                teacher t on t.teacher_id=ct.teacher_id
            LEFT JOIN
                class c on c.class_id=ct.class_id
            WHERE
                ss.student_id=s_id AND ss.period=per
        )
    WHERE assignment=asgmt
$$  

最佳答案

没有什么既定的惯例,但我看到了两个共同的主题。但首先不要截断参数名称,这实际上会使阅读和理解它们变得更加困难;还要对齐它们,而不仅仅是将它们串起来。最常见的是将参数设置为 p_ 。另一种是使用 _in 或 _ot 为参数添加后缀
示例:

CREATE PROCEDURE 
   insert_assignment(p_student_id INT, p_period INT, p_cl VARCHAR(50), p_ln VARCHAR(50), p_sped_id INT, p_assignment VARCHAR(500))
LANGUAGE SQL ...

or 

CREATE PROCEDURE  
   insert_assignment(student_id_in INT, 
                     period_in INT,
                     cl_in VARCHAR(50),
                     ln_in VARCHAR(50), 
                     sped_id_in INT,
                     assignment_in VARCHAR(500)
                    )
    LANGUAGE SQL ... 

不确定 cl,ln,因为您没有使用它们。至于 sepd,如果它在您的组织中常用,那就没问题,否则(恕我直言)它是一个糟糕的名字。理解你的主要目标,而不是减少打字。 (这是一个非常糟糕的打字员写的)

关于postgresql - postgresql 中存储过程参数的命名约定,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62582963/

相关文章:

sql - 如何在 bash 脚本中对每个命令进行计时(运行一系列 psql 语句)

postgresql - 使用不同的值多次调用函数

mysql - 使用存储过程按小时计算表值

powershell - 制作 PowerShell 所需的众多参数中的至少一个

database - 如何指定 postgres 表的主键种子?

mysql - 获取 MySQL 触发器错误

python - 为什么当使用 os.system() 或 subprocess.Popen() 从 Python 调用时我的 MySQL 存储过程不执行?

parameters - Flutter:将传递的参数更改为 "StatefulWidget"

java - Spring请求参数自定义解析

python - postgres 数组字段中最常见的单词