create or replace procedure create_table as begin execute immediate 'create table emp2( id number, name varchar2(10), salary number)'; --动态SQL为DDL语句 execute immediate 'insert into emp2 values (100,''jacky'',5600)'; execute immediate 'insert into emp2 values (101,''rose'',3000)'; execute immediate 'insert into emp2 values (102,''john'',4500)'; end create_table;
修改之后这样,运行还是出现这个提示。 create or replace procedure create_table as begin execute immediate 'create table emp2( id number, name varchar2(10), salary number)'; --动态SQL为DDL语句 execute immediate 'insert into emp2 values (100,'jacky',5600)'; execute immediate ' insert into emp2 values (101,'rose',3000)'; execute immediate ' insert into emp2 values (102,'john',4500)'; end create_table; /
修改之后这样,运行还是出现这个提示。 create or replace procedure create_table as begin execute immediate 'create table emp2( id number, name varchar2(10), salary number)'; --动态SQL为DDL语句 execute immediate 'insert into emp2 values (100,'jacky',5600)'; execute immediate ' insert into emp2 values (101,'rose',3000)'; execute immediate ' insert into emp2 values (102,'john',4500)'; end create_table; / '引号得转义,用我给你写的那个
create or replace procedure create_table as begin execute immediate 'create table emp2( id number, name varchar2(10), salary number )';--动态SQL为DDL语句 insert into emp2 values (100,'jacky',5600); insert into emp2 values (101,'rose',3000); insert into emp2 values (102,'john',4500); end create_table; 执行通过,没有报错啊。 楼主看看是不是你的英文符号哪里写成了中文的了
这段代码是没有问题的,现在出现另外一种情况 执行这个存储过程,提示权限不足。 我同样的情况创建另外的存储过程是可以正常执行的。是不是代码本身的问题? 你可以看看,需要create any table权限
这段代码是没有问题的,现在出现另外一种情况 执行这个存储过程,提示权限不足。 我同样的情况创建另外的存储过程是可以正常执行的。是不是代码本身的问题? 你可以看看,需要create any table权限 单独试了一下创建表的语句,是可以成功的
单独试验所有的sql都好用么。。你把提示的权限不足内容贴出来看看。。
给了权限之后 就可以了。还是存在迷惑,为什么sql 命令执行就可以创建表,而在执行存储过程就不能。
SQL> exec createtable; BEGIN createtable; END;* 第 1 行出现错误: ORA-01031: 权限不足 ORA-06512: 在 "SCOTT.CREATETABLE", line 3 ORA-06512: 在 line 1对于单独创建表的sql语句是可行的。 SQL> create table pp( 2 id number(4));表已创建。
你是再scott下执行的是么,我试一下。。
是的。后来换到system as sysdba下就正常运行了
我才试验了一下,只要scott有create any table权限,就可以正常执行。。
不知道,我试了一下 sql语句就可以创建表,上面的存储过程就不行。权限提升之后就可以正常运行。
不知道,我试了一下 sql语句就可以创建表,上面的存储过程就不行。权限提升之后就可以正常运行。 -- Grant/Revoke role privileges grant connect to SCOTT; grant resource to SCOTT; -- Grant/Revoke system privileges grant create any table to SCOTT; grant unlimited tablespace to SCOTT; 上面是我scott的所有权限,运行存储过程没问题,你再试试吧。。
不知道,我试了一下 sql语句就可以创建表,上面的存储过程就不行。权限提升之后就可以正常运行。 -- Grant/Revoke role privileges grant connect to SCOTT; grant resource to SCOTT; -- Grant/Revoke system privileges grant create any table to SCOTT; grant unlimited tablespace to SCOTT; 上面是我scott的所有权限,运行存储过程没问题,你再试试吧。。 你使用了grant create any table to SCOTT; 加了这个权限,当然是可以的啦.
因为编译的时候还寻找不到表对象。。
create or replace procedure create_table as
begin
execute immediate
'create table emp2(
id number,
name varchar2(10),
salary number)'; --动态SQL为DDL语句
execute immediate 'insert into emp2
values (100,''jacky'',5600)';
execute immediate 'insert into emp2
values (101,''rose'',3000)';
execute immediate 'insert into emp2
values (102,''john'',4500)';
end create_table;
修改之后这样,运行还是出现这个提示。
create or replace procedure create_table as
begin
execute immediate
'create table emp2(
id number,
name varchar2(10),
salary number)'; --动态SQL为DDL语句
execute immediate 'insert into emp2
values (100,'jacky',5600)';
execute immediate '
insert into emp2
values (101,'rose',3000)';
execute immediate '
insert into emp2
values (102,'john',4500)';
end create_table;
/
修改之后这样,运行还是出现这个提示。
create or replace procedure create_table as
begin
execute immediate
'create table emp2(
id number,
name varchar2(10),
salary number)'; --动态SQL为DDL语句
execute immediate 'insert into emp2
values (100,'jacky',5600)';
execute immediate '
insert into emp2
values (101,'rose',3000)';
execute immediate '
insert into emp2
values (102,'john',4500)';
end create_table;
/
'引号得转义,用我给你写的那个
begin
execute immediate
'create table emp2(
id number,
name varchar2(10),
salary number
)';--动态SQL为DDL语句
insert into emp2
values (100,'jacky',5600);
insert into emp2
values (101,'rose',3000);
insert into emp2
values (102,'john',4500);
end create_table;
执行通过,没有报错啊。
楼主看看是不是你的英文符号哪里写成了中文的了
没注意看,这段SQL编译能通过,执行时候会报错。找不到表或者视图。二楼说的是对的
执行这个存储过程,提示权限不足。
我同样的情况创建另外的存储过程是可以正常执行的。是不是代码本身的问题?
你可以看看,需要create any table权限
执行这个存储过程,提示权限不足。
我同样的情况创建另外的存储过程是可以正常执行的。是不是代码本身的问题?
你可以看看,需要create any table权限
单独试了一下创建表的语句,是可以成功的
给了权限之后 就可以了。还是存在迷惑,为什么sql 命令执行就可以创建表,而在执行存储过程就不能。
SQL> exec createtable;
BEGIN createtable; END;*
第 1 行出现错误:
ORA-01031: 权限不足
ORA-06512: 在 "SCOTT.CREATETABLE", line 3
ORA-06512: 在 line 1对于单独创建表的sql语句是可行的。
SQL> create table pp(
2 id number(4));表已创建。
-- Grant/Revoke role privileges
grant connect to SCOTT;
grant resource to SCOTT;
-- Grant/Revoke system privileges
grant create any table to SCOTT;
grant unlimited tablespace to SCOTT;
上面是我scott的所有权限,运行存储过程没问题,你再试试吧。。
-- Grant/Revoke role privileges
grant connect to SCOTT;
grant resource to SCOTT;
-- Grant/Revoke system privileges
grant create any table to SCOTT;
grant unlimited tablespace to SCOTT;
上面是我scott的所有权限,运行存储过程没问题,你再试试吧。。
你使用了grant create any table to SCOTT; 加了这个权限,当然是可以的啦.
oracle就是这么设计的,再存储过程中必须显示的授权。
也是管理最终用户,区别于其他角色的一种策略。。
呵呵.你这样实现,和下面的实现的方式应该也是可以达到同样的效果
connect scott as sysdba
不纠结了。