使用匿名块内的变量更改 SQL SEQUENCE 不起作用

Using a variable inside an anonymous block to ALTER an SQL SEQUENCE not working

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

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 是无效数字的错误。如果当我从 table 中获取值时,它无法将其识别为数字,我不确定如何才能使最大值与 table 的计数相同。如果我只是把数字直接放在 6 而不是 new_max 中,它就可以正常工作。它只是不会识别变量。我正在使用 SQLPLUS。

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

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