【发布时间】:2020-12-16 02:07:20
【问题描述】:
我正在尝试在匿名块中创建一个序列(这是一个将在多个环境中启动的脚本)并且我正在使用立即执行,这是代码:
SELECT MAX(ID_VINCULACION)
INTO vMAX_VINCULACION
FROM SA_ENTIDADES_VINCULADAS;
EXECUTE IMMEDIATE 'CREATE SEQUENCE "GPP"."SEQ_ENTIDADES_VINCULADAS" MINVALUE 1 MAXVALUE 99999999999999999999999999 INCREMENT BY 1 START WITH ' || vMAX_VINCULACION || ' NOCACHE NOORDER NOCYCLE NOKEEP NOSCALE GLOBAL';
我使用 select max 作为开始,所以我可以获得最大的现有 ID,但它抛出了这个错误:
ORA-00933: SQL 命令未正确结束 ORA-06512: 在第 40 行 ORA-06512:在第 40 行
我不完全知道为什么,所以我尝试使用 Execute Immediate ... 使用,这是生成的代码:
SELECT MAX(ID_VINCULACION)
INTO vMAX_VINCULACION
FROM SA_ENTIDADES_VINCULADAS;
EXECUTE IMMEDIATE 'CREATE SEQUENCE "GPP"."SEQ_ENTIDADES_VINCULADAS" MINVALUE 1 MAXVALUE 99999999999999999999999999 INCREMENT BY 1 START WITH :a NOCACHE NOORDER NOCYCLE NOKEEP NOSCALE GLOBAL' USING vMAX_VINCULACION;
这又引发了另一个错误...:
ORA-01722: 无效号码
我也没有得到这个,因为 Max 函数返回一个数字。我试过启动查询,它返回一个 5。
所以我在这里很迷茫,希望你能帮助我。
提前致谢。
【问题讨论】:
-
EXECUTE IMMEDIATE用于不带参数的语句。
标签: sql oracle oracle10g execute-immediate