create or replace procedure evejb
as
v_createsql1 varchar2(400);
v_dropsql1 varchar2(100);
v_count1 number(9);
begin
v_createsql1:='create table emp (empno nvarchar2(60),empname nvarchar2(60),sex nvarchar2(60),sal nvarchar2(60),dept nvarchar2(60),city nvarchar2(60))';
v_dropsql1:='drop table emp';
select count(*) into v_count1 from user_tables where table_name='EMP';
if v_count1>0
then
execute immediate v_dropsql1;
execute immediate v_createsql1;
commit;
else
execute immediate v_createsql1;
commit;
end if;
insert into emp values('XX01','王小二','man','5400','XX','HZ');
end;
我这边写了一个存储过程,想实现如下效果,如果emp表存在,就先drop,再create,如果不存在,就直接create,表建好之后,再insert into到这个表,但是在编译的时候提示,表或试图不存在,这个是在检查insert into emp这行的时候提示的,请问一下存储过程应该怎么去改才能实现我的意图?
意思是存储过程现在编译的时候发现表不存在啊,肯定提示了。你可以先手动创建个emp或者是最后一句也使用拼sql的方式执行
,,,其实我想实现的就是在没有表的情况下实现创建表并插入数据的功能
@wupk: oracle编译的时候会校验,没表示不让编译通过的
@webaspx: 我晓得这个,我在想有没有办法能够绕过验证
可以通过静态字段的方式先去查看你的表是否存在,并把得到值赋给你定义的变量:
select COUNT(*) into val001 from dba_tables where table_name = '你的表名(注意大小写一直)';
然后用if去判断变量val001,存在值会是1,不存在为0,然后再if里面去写逻辑代码,就不会再报表或者视图不存在了,
因为前期你不存在就有了对表的操作,因此报错。希望有帮助。