【问题标题】:Best way to create a stored procedure that takes about 30 columns as arguments ? in postgres创建以大约 30 列作为参数的存储过程的最佳方法?在 postgres
【发布时间】:2014-01-22 19:53:29
【问题描述】:

创建存储过程以将更改应用到有大约 30 个参数(列)要更改的数据库的最佳方法是什么?

现在我正在存储过程中创建一个巨大的插入查询,其中列出了用户传递的所有参数。对于这么大的存储过程,这是唯一的方法还是有更好的方法?

例子:

CREATE OR REPLACE FUNCTION "applyntunesettings"(val1,val2....val30)
RETURNS void AS
BEGIN
   INSERT INTO calibrationstable (col1,col2........col20) Values (val1,val2.....val20);
   INSERT INTO devicestable (col1,col2,.....col10) values (val21,val22,....val30);
END

【问题讨论】:

  • 请不要用 SQL Server 标记 PostgreSQL 问题。该标签并不意味着“PostgreSQL 服务器” - please read the tag wiki.
  • 这取决于您打算使用哪种编程语言/IDE/系统?
  • @AaronBertrand 非常烦人的是“sql-server”是规范标签。它应该是“ms-sql-server”,“sql-server”是同义词。

标签: sql postgresql stored-procedures


【解决方案1】:

有时,行类型变量会很方便。假设表格是“校准”和“设备”,我们可以这样写:

CREATE OR REPLACE FUNCTION applyntunesettings (
    _device_name    TEXT
,   _some_value     TEXT
,   _other_value    TEXT
    -- and so on
) RETURNS void AS $$
DECLARE
    _calibration    calibrations;
    _device         devices;
BEGIN

    _device.name    := _device_name;
    INSERT INTO devices SELECT _device.*;

    _calibration.some_value     := _some_value;
    _calibration.other_value    := _other_value;
    INSERT INTO calibrations SELECT _calibration.*;

END $$ LANGUAGE plpgsql;

【讨论】:

    猜你喜欢
    • 2015-09-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-16
    • 1970-01-01
    • 2013-05-25
    相关资源
    最近更新 更多