如何解决HANA:如何使用动态起始值正确“创建序列开始”?
以下 sql 语句出错。
CREATE SEQUENCE id_seq START WITH (SELECT MAX(identificationnumber)+1 FROM newsletter_status);
无法执行 'CREATE SEQUENCE id_seq START WITH SELECT MAX(identificationnumber) FROM newsletter_status'Error: (dberror) [257]: sql 语法错误:“SELECT”附近的语法不正确:line 1 col 41 (at pos 42)
我应该提到 SELECT MAX(identificationnumber) FROM newsletter_status
工作正常并返回一个数字。
尝试先将值提取到变量中也无济于事。
DO
BEGIN
DECLARE identificationnumber_max BIGINT;
SELECT MAX(identificationnumber) INTO identificationnumber_max FROM newsletter_status;
CREATE SEQUENCE id_seq START WITH :identificationnumber_max + 1;
END;
无法执行 'DO BEGIN DECLARE Identificationnumber_max BIGINT; SELECT MAX(identificationnumber) INTO ...'Error: (dberror) [257]: sql 语法错误:":identificationnumber_max" 附近的语法不正确:第 5 行第 38 行(在 pos 184)
当我执行以下操作时,我会得到我想要的结果。
DO
BEGIN
DECLARE identificationnumber_max BIGINT;
SELECT MAX(identificationnumber) INTO identificationnumber_max FROM newsletter_status;
EXEC 'CREATE SEQUENCE id_seq START WITH ' || :identificationnumber_max + 1 || ';';
END;
但是对于一个应该非常明显且易于实现的事情来说,这看起来非常庞大和复杂。这降低了可读性。有没有更简单的方法来做我想做的事?
解决方法
如果您检查 the documentation 和 notation definition,您会发现:
START WITH <start_value>
<start_value> ::= <signed_integer>
这样就不可能有任何表达。我找不到任何合理的论据,因为有可能在 reset by
部分指定子查询,因此序列仍将取决于所涉及的表,并且 starts with
可能使用相同的机制。
无论如何,您可以考虑使用reset by
:
CREATE SEQUENCE id_seq
START WITH 1
INCREMENT BY 1
RESET BY (
SELECT MAX(identificationnumber)+1
FROM newsletter_status
)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。