在存储过程中动态创建序列,使用时老提示序列不存在。部分代码如下:
select count(*) into amount from user_sequences where sequence_name='WZ_SEQ';
if(amount>0) then
execute immediate 'drop sequence WZ_SEQ';
end if;
execute immediate 'create sequence WZ_SEQ start with 1 increment by 1 nominvalue nomaxvalue nocache'; insert into a(id) select WZ_SEQ .nextval from ...
...在执行上述代码前,如果WZ_SEQ存在就不报错,
如果不存在,执行到insert into 语句就报序列不存在。请高手指点,谢谢!
select count(*) into amount from user_sequences where sequence_name='WZ_SEQ';
if(amount>0) then
execute immediate 'drop sequence WZ_SEQ';
end if;
execute immediate 'create sequence WZ_SEQ start with 1 increment by 1 nominvalue nomaxvalue nocache'; insert into a(id) select WZ_SEQ .nextval from ...
...在执行上述代码前,如果WZ_SEQ存在就不报错,
如果不存在,执行到insert into 语句就报序列不存在。请高手指点,谢谢!
解决方案 »
- 新手提问 oracle toad 不能创建package
- oracle安装路径
- Proc的error:error: stray '\129' in program 是什么意思?
- lob类型的索引!急!!!!!!!!!!
- 如果某表不存在的话创建表,存在的话做更新请问应该如何写
- 请问如何写如下SQL语句
- 着急!初学者使用 database configuration assistant 向导创建一个新数据库,报错如下:
- 创建表空间错误,求救!!!
- 【求助】关于"Internal Password"……(版本805,Oracle Database Assistant的使用)
- ORACLE数据库启动的问题,在线等待
- VC操作Oracle存储过程获取数据集数目
- oracle建分区时能否只按时间不要日期限制??
execute immediate 'create sequence WZ_SEQ start with 1 increment by 1 nominvalue nomaxvalue nocache';
执行之前,序列还没有建立,因此在编译到
insert into a(id) select WZ_SEQ .nextval from ... 的时候,当然就报错了。解决方法 2种:
1、提前把序列建好。
2、把下面用到序列的地方,通通改成 execute immediate 动态sql。
我的意思是说,如果开始WZ_SEQ不存在,执行如下代码:
execute immediate 'create sequence WZ_SEQ start with 1 increment by 1 nominvalue nomaxvalue nocache';
insert into a(id) select WZ_SEQ .nextval from ... 就会提示序列不存在。你们可以在plsql里试一下。
execute immediate 'insert into a(id) select WZ_SEQ .nextval from ... ';