HANA:如何正确"CREATE SEQUENCE START WITH"动态起始值?



我想为一个序列创建一个SQL语句,该语句将动态设置起始值。

以下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'错误:(dberror([257]:sql语法错误:在"SELECT":第1行第41列(位置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…'错误:(dberror([257]:sql语法错误:"附近的语法不正确:identificationnumber_max":第5行第38列(位置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;

但对于一个应该非常明显且易于实现的东西来说,这看起来非常庞大和复杂。这会降低可读性。有没有一种更简单的方法来做我想做的事?

如果您检查文档和符号定义,您会发现:

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
)

最新更新