当前位置: 首页 > 面试题库 >

如何在Postgres sql函数中引用命名参数?

上官鸿朗
2023-03-14
问题内容

Postgres noobie在这里。

我正在尝试将SQL Server存储的proc转换为Postgres函数。当前无法弄清楚如何将此SQL行转换为Postgres。

SQL Server:

input: @name = null

SELECT *
FROM table
WHERE name = ISNULL(@name, name)

Postgres:

input: n = null

SELECT *
FROM table
WHERE name = COALESCE(n, name)

我收到错误消息“第n列不存在”。如何在Postgres函数的select语句中引用参数?

更新:

Postgres函数的定义

CREATE OR REPLACE FUNCTION fn_name (n VARCHAR(32) = NULL, name OUT varchar(32), description OUT varchar(64))
RETURNS setof record
AS 
$$
    SELECT u.name
        , u.description
    FROM table_a u
    WHERE u.name = COALESCE(n, u.name);

$$
LANGUAGE sql;

问题答案:

修订:正如评论中指出的那样,该答案在2012年初编写时是准确的,但自2012年末发布的v9.2起已支持命名参数。

当您的函数使用SQL语言时,参数名称仅是修饰。您可以在定义为的存储过程中按名称使用参数language plpgsql

因此,必须使用$ X引用函数args,其中X是函数的参数列表的顺序位置(从1开始)。

CREATE OR REPLACE FUNCTION fn_name (
  n VARCHAR(32) = NULL,
  OUT name varchar(32),
  OUT description varchar(64) )
RETURNS setof record
AS 
$$
    SELECT u.name
        , u.description
    FROM table_a u
    WHERE u.name = COALESCE($1, u.name);
$$
LANGUAGE sql;


 类似资料:
  • 我尝试使用以下代码来完成此操作: 我得到以下输出: sim(测试,“测试”)

  • 我有一个函数,我正在尝试转换为ES6中的新箭头语法。它是一个命名函数: 有没有办法给它一个没有var语句的名字: 显然,我只能在定义了这个函数之后才能使用它。大致如下: 在ES6中有没有一种新的方法可以做到这一点?

  • 问题内容: 在Swift中,调用第一个参数时会使用参数名称。为什么不使用名字? 使用Swift手册的变体; 这会起作用; 但这给了我“调用中的外部参数标签’amount’” 是否有这个原因,或者这是“按其原样”的事物之一? 问题答案: 这是遵循Objective-C习惯的惯例,第一个参数的名称与方法名称结合在一起。这是一个例子: 您可以像这样调用方法: 通过将参数的名称合并到方法的名称中,可以使阅

  • 本文向大家介绍PowerShell中对函数参数的命名建议,包括了PowerShell中对函数参数的命名建议的使用技巧和注意事项,需要的朋友参考一下 PowerShell自定义函数的参数没有具体的命名规则,那么怎么做才能让参数的命名更加科学可持续。 我们应该怎么来命名函数的参数名称呢?有没有一个可供参考的列表?当然微软没有给出来。但是我们可以来理一个列表出来。微软自带了大量的cmdlet,这些cmd

  • 本文向大家介绍PHP 引用命名空间中的类或函数,包括了PHP 引用命名空间中的类或函数的使用技巧和注意事项,需要的朋友参考一下 示例 如声明命名空间中所示,我们可以在命名空间中定义一个类,如下所示: 要引用该类,需要使用完整路径(包括名称空间): 可以通过use-statement导入类来缩短此时间: 对于PHP 7.0,您可以use使用方括号将各种-statement组合在一个语句中: 有时两个

  • 我的功能有问题,它使用作为进行搜索,但数据库中没有 我有一个错误: Illumb\Database\QueryException(42S22)SQLSTATE[42S22]:未找到列:“where子句”中的1054未知列“courses.id”(SQL:select*fromwhereid=cmpe102 limit 1)