使用匿名块内的变量更改 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);
我正在尝试更改 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);