如果是没有权限的话,照这下面做就OK了:
grant sysdba, dba, create session, create any table , create any view , create any index , create any procedure ,
alter any table , alter any procedure , drop any table , drop any view , drop any index , drop any procedure ,
select any table , insert any table , update any table , delete any table
to test_data(数据库用户名);
首先我觉得你的逻辑有问题,既然数据库里面存在了表你就删除,但是你却把创建表的执行代码写在了else 条件里面;那意思如果数据库存在了你要创建的这张表,你的逻辑只是把它删除,但是却没有创建。
下面是我整理的代码你看看:
create or replace procedure createtable(
tname varchar2
)
is
v_createsql varchar2(400);
v_dropsql varchar2(100);
v_count number(9);
begin
v_createsql:='create table '||tname||'(
a number(8) primary key,
b varchar2(20))';
v_dropsql:='drop table '||tname||' cascade constraints';
select count(*) into v_count from user_tables where table_name=upper('java7');
if v_count>0 then
execute immediate v_dropsql;
commit;
end if;
execute immediate v_createsql;
commit;
end;
begin
createtable('java7');
end;
-- select * from java7
没有权限?具体点 或者贴图!
不过应该是没有create table和drop table的权限吧,你试试赋下给此用户看看
存储过程里面有些关键字是不让出现的 比如create 你自己看下资料