在匿名块中使用变量来更改 SQL SEQUENCE 不起作用

Posted

技术标签:

【中文标题】在匿名块中使用变量来更改 SQL SEQUENCE 不起作用【英文标题】:Using a variable inside an anonymous block to ALTER an SQL SEQUENCE not working 【发布时间】:2019-11-26 16:48:10 【问题描述】:

我正在尝试更改声明语句中序列的最大值。在声明中,我正在查询一个表以获取计数以使该计数成为序列的最大值。更一般地说,我试图将最大值设置为表中的行数。

CREATE SEQUENCE counter
START WITH 1
INCREMENT BY 1
MINVALUE 1 
MAXVALUE 5
CYCLE 
CACHE 4; 

DECLARE
      new_max NUMBER(2);
BEGIN
      SELECT count(*) INTO new_max 
      FROM Sim_Price;

      execute immediate 'ALTER SEQUENCE counter
              MAXVALUE new_max';
END; 
/

我收到 new_max 是无效数字的错误。我不确定如何使最大值与我的表的计数相同,如果当我从表中获取值时,它不会将其识别为数字。如果我直接输入一个数字,比如 6 而不是 new_max,它就可以正常工作。它只是无法识别变量。我正在使用 SQLPLUS。

【问题讨论】:

【参考方案1】:

您对变量 new_max 的处理导致它被解释为“new_max”字符串。您需要将 new_max 的内容显示为您用于 EXECUTE IMMEDIATE 的字符串中的值。

execute immediate 'ALTER SEQUENCE counter maxvalue ' || TO_CHAR(new_max);

【讨论】:

以上是关于在匿名块中使用变量来更改 SQL SEQUENCE 不起作用的主要内容,如果未能解决你的问题,请参考以下文章

如何在匿名 PL/SQL 块中自动显示所有 SQL 语句的输出

为啥在匿名 PL/SQL 块中没有立即引发异常?

无法在 Oracle 匿名块中调用和执行 .sql 脚本文件

匿名 pl/sql 块中的声明顺序

我可以在调用同一过程后将 PL/SQL 过程放在匿名块中吗?

Oracle 匿名 PL/SQL 块中缺少关键字错误