wdsa15413243513215
wdsa15413243513215
采纳率0%
2017-07-14 09:02 阅读 739

oracle存储过程的一个问题

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这行的时候提示的,请问一下存储过程应该怎么去改才能实现我的意图?

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享

5条回答 默认 最新

  • gongrui_59 gongrui_59 2017-07-14 09:27

    可能创建表权限不足哦

    点赞 评论 复制链接分享
  • u012556249 风中的千纸鹤 2017-07-14 10:04

    在存储过程中对数据库中的表进行操作时需要授予相应的权限给操作用户才可以,否则即使拥有dba权限都没办法操作这张表,可以grant delete,insert,update,select on emp to username;

    点赞 评论 复制链接分享
  • qq_27718453 庄粟 2017-07-17 03:11

    表名大小写是不是要统一下,这字段名也是如此,小写的话要加双引号,不知道是不是这个坑

    点赞 评论 复制链接分享
  • qq_19338473 biubiu灰 2017-07-19 09:04

    execute immediate 'insert into emp values(''XX01'',''王小二'',''man'',''5400'',''XX'',''HZ'')'

    点赞 评论 复制链接分享
  • yingshuli_e yingshuli_e 2017-07-20 02:57

    可以使用动态sql。。这样再确保表存在的前提下再执行insert 语句就可以了

    点赞 评论 复制链接分享

相关推荐