Oracle PLSQL:在匿名块内更新失败,但在匿名块外更新成功。

问题描述 投票:1回答:1

我有这个数据补丁。

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;

我可以用第二种方法 但我很好奇为什么在区块内更新会失败 谢谢你的帮助。

plsql oracle12c
1个回答
2
投票

因为在编译时,这个序列并不存在。如果你想在PLSQL块中使用它,你就必须这样做。动态就像你创建序列一样

© www.soinside.com 2019 - 2024. All rights reserved.