gpt4 book ai didi

plsql - 匿名 block 内的更新失败但可以解决

转载 作者:行者123 更新时间:2023-12-04 09:41:10 28 4
gpt4 key购买 nike

我有这个数据补丁:

ALTER TABLE MY_TABLE ADD new_id number;

DECLARE
MAX_ID NUMBER;
BEGIN
SELECT max(id) INTO MAX_ID FROM some_table;
EXECUTE IMMEDIATE 'CREATE sequence temp_seq start WITH ' || MAX_ID || ' increment by 1';
UPDATE MY_TABLE SET new_id = temp_seq.nextval;
EXECUTE IMMEDIATE 'DROP sequence temp_seq';
END;
/
这给了我
UPDATE MY_TABLE SET new_id = temp_seq.nextval;
*
ERROR at line 8:
ORA-06550: line 8, column 40:
PL/SQL: ORA-02289: sequence does not exist
ORA-06550: line 8, column 3:
PL/SQL: SQL Statement ignored
但是如果我将更新移到外面,它会起作用:
DECLARE
MAX_ID NUMBER;
BEGIN
SELECT max(id) INTO MAX_ID FROM some_table;
EXECUTE IMMEDIATE 'CREATE sequence temp_seq start WITH ' || MAX_ID || ' increment by 1';
END;
/

UPDATE MY_TABLE SET new_id = temp_seq.nextval;
我可以使用第二种方法,但我很好奇为什么块内的更新失败。

最佳答案

因为在编译时该序列不存在。如果您想在 PL/SQL 块中使用它,您必须动态地这样做,就像您创建序列一样。

关于plsql - 匿名 block 内的更新失败但可以解决,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62322850/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com