Sql 如何检查序列是否高于某个数字,如果不在Postgres中更改它
我有一个问题,我的SQL序列必须高于某个数字才能修复唯一的约束错误。现在我开始写一个if语句来检查某个数字,如果它在下面,它应该增加到某个数字。该声明适用于博士后 我得到了独立的部分运行,但连接如果是抛出一个错误,我不知道为什么 首先选择当前号码:Sql 如何检查序列是否高于某个数字,如果不在Postgres中更改它,sql,postgresql,if-statement,syntax-error,sequence,Sql,Postgresql,If Statement,Syntax Error,Sequence,我有一个问题,我的SQL序列必须高于某个数字才能修复唯一的约束错误。现在我开始写一个if语句来检查某个数字,如果它在下面,它应该增加到某个数字。该声明适用于博士后 我得到了独立的部分运行,但连接如果是抛出一个错误,我不知道为什么 首先选择当前号码: SELECT nextval('mySequence') 然后更新号码: SELECT setval('mySequence', targetNumber, true) 在我的示例中,完整的语句如下所示: IF (SELECT nextval('
SELECT nextval('mySequence')
然后更新号码:
SELECT setval('mySequence', targetNumber, true)
在我的示例中,完整的语句如下所示:
IF (SELECT nextval('mySequence') < targetNumber)
THEN (SELECT setval('mySequence', targetNumber, true))
END IF;
有人能解释一下我做错了什么,因为错误信息没有给我太多的工作机会吗?非常感谢您的帮助。试试以下方法:
如果要使用if语句,可以使用postgres函数。 您可以尝试以下方法: 创建序列序列\测试\ id \序列; 创建表seq_测试 id整数不为空默认下一步'seq_test_id_seq', 名称VARCHAR ; 创建或替换功能序列\测试\功能目标\编号bigint 返回无效 语言“plpgsql” 不稳定的 平行不安全 100美元 作为$BODY$ 声明 seq_val整数; 开始 选择下一个'seq_test_id_seq'进入seq_val; 提出通知“下一个序列[%]”,序号; 如果seq_val<目标编号,则 选择setval'seq_test_id_seq',target_number,true为seq_val; 提出通知“序列值已修改[%]”,序号; 如果结束; 终止 $BODY$; 然后调用以下过程: 选择顺序测试功能10;
SQL是一种查询语言,不支持像IF这样的过程构造。是否正在查找:?如果这只适用于单个表:选择setval'mysequence',从_表中选择maxid我是否可以使用其他方法来重新创建某种机制,例如if语句读取case-then和一些使之成为可能的东西?您不需要所有这些。您可以在不使用任何程序代码、大小写表达式或类似内容的情况下同步序列。从_表中选择setval'mysequence',maxid;
ERROR: syntax error at »IF«
SELECT setval('mySequence', targetNumber, true)
WHERE (SELECT nextval('mySequence') < targetNumber) is true;