declare
t number;
begin
execute immediate 'create sequence seq_test';
select seq_test.nextval into t from dual;
dbms_output.put_line(t);
end;
为什么会报序列不存在?
PLSQL中创建序列问题
答案:3 悬赏:30 手机版
解决时间 2021-02-12 07:45
- 提问者网友:酱爆肉
- 2021-02-11 07:41
最佳答案
- 五星知识达人网友:孤独的牧羊人
- 2021-02-11 09:10
这是由于select seq_test.nextval into t from dual; 这个语句当中的seq_test在整个语句执行前还不存在造成的,我刚才测试了一下用变量来代替seq_test貌似还有问题,你自己也研究研究吧,我先去吃饭了,完了再想想撤。
补充:在seq_test已经存在的情况下就没有任何问题
SQL> declare
2 t number;
3 s varchar2(30):='create sequence seq_test';
4 begin
5 execute immediate 'drop sequence seq_test';
6 execute immediate s;
7 select seq_test.nextval into t from dual;
8 dbms_output.put_line(t);
9 end;
10 /
1
PL/SQL procedure successfully completed.
补充:在seq_test已经存在的情况下就没有任何问题
SQL> declare
2 t number;
3 s varchar2(30):='create sequence seq_test';
4 begin
5 execute immediate 'drop sequence seq_test';
6 execute immediate s;
7 select seq_test.nextval into t from dual;
8 dbms_output.put_line(t);
9 end;
10 /
1
PL/SQL procedure successfully completed.
全部回答
- 1楼网友:孤老序
- 2021-02-11 11:35
当编译器编译动态sql语句时是跳过的编译的,而编译到下一句自然没有seq_test这个序列,所以编译时就错误了。
- 2楼网友:佘樂
- 2021-02-11 10:39
你好!
CREATE SEQUENCE LOG_S
INCREMENT BY 1 START WITH 2001
MAXVALUE 9999999
MINVALUE 1 NOCYCLE CACHE 1000 NOORDER ;
以上创建SEQUENCE 参考
打字不易,采纳哦!
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯