错误:具有默认值的输入参数在 Postgres 中也必须具有默认值

2023-12-13

我正在尝试设置default值内的变量function in parameter列出但出现错误:

错误:具有默认值的输入参数之后也必须具有默认值

Example:

 Create or replace function test(name varchar default null
                               , city varchar default null
                               , phonenumber varchar(20) default null
                               , out sno bigint, address varchar)
   returns void as
 $$
 Declare 
        phonenumber AS VarChar(20);
 Begin
        phonenumber : =phonenumber; 
  
    SELECT sno = MAX(ssno)+1 FROM emp;

    IF(sno IS NULL)  then
           sno=IDENT_CURRENT('emp')+1;
    end;
    
    raise info '%',name;
    raise info '%',city;
    raise info '%',phonenumber;
    raise info '%',address;

    insert into emp(ename,ecity,ephonenumber,eaddress)
    values(name,city,phonenumber,address);

 end;
 $$
 langauge plpgsql;

你的例子中有很多不正确的地方。或者更确切地说:不多is就在你的例子中。

CREATE OR REPLACE FUNCTION f_test(
     name text = NULL
   , city text = NULL
   , phonenumber text = NULL
    ,address text = NULL
   , OUT sno bigint)
RETURNS void AS
 $func$
DECLARE 
    phonenumber AS VarChar(20);  -- would collide with parameter name
BEGIN
phonenumber := phonenumber;      -- nonsense

SELECT INTO sno  max(ssno) + 1 FROM emp;  -- SELECT INTO for assignment

IF sno IS NULL THEN
  sno := ident_current('emp') + 1;
END IF;

RAISE NOTICE '%, %, %, %', name, city, phonenumber, address;

INSERT INTO emp(ename, ecity, ephonenumber, eaddress)
VALUES (name, city, phonenumber, address);

END
$func$  LANGUAGE plpgsql;

主要观点

  • 错误消息不言而喻:

    具有默认值的输入参数之后也必须具有默认值。

    这差不多了手册中有什么内容:

    具有默认值的参数后面的所有输入参数都必须 也有默认值。

  • 结合起来没有意义RETURNS void with OUT参数。

  • 不要声明与参数名称冲突的变量名称。这里完全没用。

  • The plpgsql 赋值运算符是:=, not =.

  • 您通常不使用RAISE level INFO。你要NOTICE反而。

  • SELECT没有目标在 plpgsql 中是不可能的,你想要SELECT INTO.

  • IF终止于END IF不与END.

进一步简化

Use COALESCE来代替你的IF陈述。即使表为空,聚合函数也会返回一行。
但你也不需要那个。只需使用RETURNING子句直接返回新的 id:

CREATE OR REPLACE FUNCTION f_test(
     name text = NULL
   , city text = NULL
   , phonenumber text = NULL
   , address text = NULL
   , OUT sno bigint)
AS
$func$
BEGIN
RAISE NOTICE '%, %, %, %', name, city, phonenumber, address;

INSERT INTO emp(ename, ecity, ephonenumber, eaddress)
VALUES (name, city, phonenumber, address)
RETURNING ssno
INTO   sno;             -- Assuming you want to return autoincremented id 

END
$func$  LANGUAGE plpgsql;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

错误:具有默认值的输入参数在 Postgres 中也必须具有默认值 的相关文章

随机推荐

  • 在启动时通过UAC授予c++程序管理权限

    所以我做了一些研究 但我有兴趣了解如何让他的程序在执行之前向 UAC 请求管理权限 这是否需要在 ShellExecute 中使用 runas 我意识到这是我在编程冒险中需要理解的事情 因为几乎我安装的每个程序都问过我这个问题 例如 如果我
  • 如何将整数转换为日期对象Python?

    我正在 python 中创建一个模块 在其中我收到整数格式的日期 例如20120213 表示 2012 年 2 月 13 日 现在 我想将这个整数格式的日期转换为 python 日期对象 另外 是否有任何方法可以减去 添加此类整数格式日期中
  • Android R 中的后台服务在省电模式下停止

    我编写了一个 Android 应用程序 通过更改电量来检查电池电量 并在电量达到特定值时发出警报 我在我的应用程序中使用了广播接收器和后台服务 它在所有 Android 版本中都能正常工作 但在 Android R 中 当打开省电模式时 服
  • 是否可以重命名 Firebase 实时数据库中的密钥?

    我想知道有没有办法更新键值 让我们使用以下数据 我正在使用 set 来写入数据 现在 我希望用户编辑他们的bookTitle两个地方都需要改变 我尝试使用 update 但似乎无法使其工作 我只能编辑bookTitle in bookInf
  • 使用 Angular 7 Material CDK 进行嵌套拖放

    我有一个拖放列表的嵌套树 不是树组件 当拖动另一个下拉列表中包含的下拉列表中的项目时 两个下拉列表都会触发 Enter Exit 事件 这意味着当一个项目被删除时 它可以被放入内部下拉列表或容器下拉列表中 具体取决于它被删除的地方 注意 这
  • 共同的偏好和清晰的历史/数据

    如果我在android中使用sharedpreference在应用程序的生命周期内将数据本地存储在设备上 直到应用程序被卸载 当用户选择从android的 gt 菜单 gt 设置 gt 清除数据 时是否有丢失数据的风险管理应用程序 gt 清
  • Java 使用 JDBC - 连接太多?

    我正在为一家酒吧编写一个库存补货系统 作为我的最后一年项目 我可以从 MYSQL 数据库检索信息 并且可以一次滚动浏览一个结果 我正在尝试根据所选类别更改结果 我已经设法使用组合框来实现此目的 但在类别之间移动时出现以下错误 线程 main
  • 为什么这些 Python tkinter 检查按钮是链接的?

    我目前正在尝试创建一个 GUI 来比较两个不同文件夹之间的文件 并拥有一个我现在正在尝试构建的基本框架 我在窗口的左侧 右侧和底部有三个框架 每个框架有两个复选按钮 我希望能够彼此独立地选择每个复选按钮 但每次我单击任何一个框架的第一个复选
  • 在联邦训练中实现数据生成器

    我已将问题发布在https github com tensorflow federated issues 793也许也在这里 我已经将自己的数据和模型定制为联合接口和融合的训练 但我对图像分类任务中的一个问题感到困惑 整个数据集非常大并且无
  • 在 Redshift 中: (\s|\+) 模式不起作用,但 ([\s]|[\+]) 可以。它们是一样的吗?

    当我在 Redshift 中运行此查询时 select distinct bot case when bot Web s Downloader then 1 else 0 end isbot from bots 我收到此错误 无效操作 重复
  • 尝试插入表时出现“ORA-00922:缺少或无效选项”

    当我在 Oracle sql Developer 中运行 SQL 查询时 它可以工作 但在 jdbc 中 此查询不起作用并捕获 java sql SQLSyntaxErrorException ORA 00922 缺少或无效选项 有人可以帮
  • Firebase 通知 - 无效的注册令牌,请检查 Android 中的令牌格式

    如果我通过从 Firebase 控制台选择包来发送推送消息 推送将发送到所有设备 但在发送到单个设备期间 它会显示错误 Invalid reg token please check token format 错误快照 控制台中的 UserI
  • 加载自定义字体时出现问题

    我正在尝试在 slick2d 中加载字体 该字体 在 Eclipse 中 位于 resources fonts slkscr ttf 使用以下代码 private void loadResources try Font fontRaw Fo
  • CLion 未在终端中运行

    在 CLion 的嵌入式终端中放置某些字符 单击 运行 按钮时弹出的 运行 选项卡 时存在此错误 我发现如果我更改 CLion 中的终端 就不会发生这种情况 我将终端更改为 cmder 现在一切正常 除了一件事 我不知道如何让 CLion
  • 使用BeautifulSoup,如何防范元素找不到?

    我正在循环遍历表中的表行 但前 1 或 2 行没有我要查找的元素 它们用于表列标题等 因此 在第三个表格行之后 表格单元格 td 中的元素包含我正在寻找的内容 e g td 0 a img src 但调用此函数会失败 因为前几行没有此函数
  • 通过单击按钮替换滑动删除的操作

    我有一个表格视图 每个单元格上都有一个标签和两个按钮 目前我有这段代码可以通过滑动来删除 void tableView UITableView tableView commitEditingStyle UITableViewCellEdit
  • 使用 Python 中的 SAX 解析器按记录的一定数量解析大型 XML

    我能够解析大型 xml 因为我在使用 SAX 解析器时遇到内存问题 我使用 XMLGenerator 来分割 xml 并再次解析它 我的问题是 有没有办法逐个解析大型 xml 例如 一旦我解析前 10000 条记录 就会加载到 csv 或
  • 在Matlab中获取完整大小的颜色条

    我正在为 Matlab 编写一个绘图自动化例程 但是 我在评估颜色条的 水平 大小时遇到 问题 我可以使用以下方法来获取颜色条的大小 cb findall groot Type colorbar get colorbar xwidth cb
  • 在移动设备上随键盘缩放的全屏 HTML 元素

    我有一个 DIV 元素 我希望它显示为浏览器的完整尺寸 但会有一些填充和圆角 这部分很简单 但我希望当键盘显示为新视口的大小时调整它的大小 我可以使用 window visualViewport height 使用 Javascript 很
  • 错误:具有默认值的输入参数在 Postgres 中也必须具有默认值

    我正在尝试设置default值内的变量function in parameter列出但出现错误 错误 具有默认值的输入参数之后也必须具有默认值 Example Create or replace function test name var