如何在oracle中使用存储过程创建表,如果存在就先删除

这个是我写的:创建存储过程createorreplaceprocedurecreateTable(tnamevarchar2,createSqlvarchar2,drop... 这个是我写的:创建存储过程
create or replace procedure createTable
(tname varchar2,createSql varchar2,dropSql varchar2)
is
vcount number(9);
begin
SELECT COUNT(*) INTO vcount FROM tabs WHERE table_name=tname;
if vcount>0 then
execute immediate dropSql;
else
execute immediate createSql;
end if;
end;
调用存储过程
declare
createSql varchar2(100):='create table java7
(
a number(8) primary key,b varchar2(20)
)';
dropSql varchar2(100):='DROP TABLE java7';
begin
createTable('JAVA7',createSql,dropSql);
end;

创建没有问题,但是在调用的是出现错误,没有权限,请教高人指点
展开
 我来答
leexiaol1108
2012-07-04 · 超过58用户采纳过TA的回答
知道小有建树答主
回答量:192
采纳率:0%
帮助的人:148万
展开全部
如果是没有权限的话,照这下面做就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
今至电子科技有限公司
2024-08-23 广告
数据库备份是确保数据安全与业务连续性的关键环节。我们上海今至电子科技有限公司高度重视数据保护,定期执行全面的数据库备份策略。这包括使用先进工具和技术,对关键业务数据进行自动化备份,并存储在安全可靠的外部存储介质或云端。通过定期验证备份的完整... 点击进入详情页
本回答由今至电子科技有限公司提供
h20043549
2012-07-01 · TA获得超过118个赞
知道答主
回答量:128
采纳率:0%
帮助的人:101万
展开全部
没有权限?具体点 或者贴图!
不过应该是没有create table和drop table的权限吧,你试试赋下给此用户看看
追问
没有啊 dba的权限呢
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
科红懿0Z
2012-07-02 · 超过64用户采纳过TA的回答
知道小有建树答主
回答量:215
采纳率:0%
帮助的人:157万
展开全部
存储过程里面有些关键字是不让出现的 比如create 你自己看下资料
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式