【问题标题】:Next value function error下一个值函数错误
【发布时间】:2013-07-23 15:50:44
【问题描述】:

我在 postgresql 执行期间收到以下错误: 错误 [HY000] 错误:您只能在目标列表中使用“下一个值”函数

这个sql语句有什么问题:

SELECT TRFCON.ID       
       ,   
       case when DDDCON.ID_CON = 0
       then
        NEXT VALUE FOR SEQ_DDD_CON   
        else
       DWHCON.ID_CON
       end ID_CON

  FROM TTT_CONSUMPTION TTTCON 

join DDDDWH_CON DWHCON on TTTCON.ID_ORG = DDDCON.ID_ORG
and TTTCON.ID_PRO = DDDCON.ID_PRO
and TTTCON.ID_REF = DDDCON.ID_REF

序列的DDL如下:

CREATE SEQUENCE SEQ_DDD_CON AS BIGINT
    START WITH 1
    INCREMENT BY 1
    NO MINVALUE 
    NO MAXVALUE 
    NO CYCLE;

【问题讨论】:

  • 您的语法和错误消息不是问题标签中建议的 MySQL 的 Postgresql
  • @ClodoaldoNeto 我认为他正试图将其从 MySQL 移植到 PG,因为 MySQL 没有序列。
  • 我使用的是 Netezza SQL,而 Netezza SQL 是基于 PostgreSQL 的

标签: mysql sql function next netezza


【解决方案1】:

来自CREATE SEQUENCE 的文档

兼容性

CREATE SEQUENCE 符合 SQL 标准,但有以下例外:

  • [...]
  • 使用 nextval() 函数而不是标准的 NEXT VALUE FOR 表达式来获取下一个值。

【讨论】:

  • 我使用了 nextval 但同样的错误。当 DDDCON.ID_CON = 0 then nextval('SEQ_DDD_CON') else DWHCON.ID_CON end ID_CON
  • 试试nextval('"SEQ_DDD_CON"')
  • case when DDDCON.ID_CON = 0 then nextval('"SEQ_DDD_CON"') else DWHCON.ID_CON end ID_CON -> 同样的错误:错误[HY000]错误:你只能使用'下一个值( s)' 目标列表中的函数
  • case when DDDCON.ID_CON = 0 then (select nextval(''SEQ_DDD_CON') else DWHCON.ID_CON end ID_CON 工作!!!感谢您的帮助
  • SELECT TRFCON.ID , NEXT VALUE FOR SEQ_DDD_CON as ID_CON1 , (select nextval('SEQ_DDD_CON')) as ID_CON2 FROM TTT_CONSUMPTION TTTCON join DDDDWH_CON DWHCON on TTTCON.ID_ORG = DDDCON.ID_ORG 和 TTTCON.ID_PRO = DDDCON.ID_PRO 和 TTTCON.ID_REF = DDDCON.ID_REF 有人知道为什么 ID_CON1 和 ID_CON2 的值是不同的值吗?重新启动序列后,它的差异为 10000。 ID_CON1=20000 ID_CON2=10000 MasterX 敬上
猜你喜欢
  • 2020-04-14
  • 2016-03-04
  • 2012-08-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-02-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多