在匿名块中使用变量来更改 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 语句的输出
无法在 Oracle 匿名块中调用和执行 .sql 脚本文件