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