这样可以不?
EXECUTE IMMEDIATE 'CREATE TABLE T_GROUP_TEMP is select * from T_GROUP';
如果不可以难道只能 先建立表 然后 每条insert ??
EXECUTE IMMEDIATE 'CREATE TABLE T_GROUP_TEMP is select * from T_GROUP';
如果不可以难道只能 先建立表 然后 每条insert ??
create or replace procedure sp_cr
is
begin
EXECUTE IMMEDIATE 'CREATE TABLE T_GROUP_TEMP as select * from T_GROUP';
end;
AS 也试过了, 就改了IS 试试
错误信息说明你没有权限 可能是建表 或者是对T_GROUP的查询权限
很确定权限是有的,
v_sql:='CREATE TABLE T_GROUP_TEMP is select * from T_GROUP'
EXECUTE IMMEDIATE v_sql;这样时 v_sql的值粘贴出来执行是正确的
insufficient privileges说明权限不足
T_GROUP上的查询权限,或者是建表权限
假设当前用户名为user1,先登录具有dba权限的用户,执行
grant create table to USER1;
grant select on t_group to USER1;
然后再登录user1执行过程
看下有没有建表权限,或者该表空间上有配额限制。如果建表权限是包含在某个角色里的话,用grant create table.. 对该用户显式授权
is
begin
EXECUTE IMMEDIATE 'CREATE TABLE T_GROUP_TEMP as select * from T_GROUP';
end;
前提是当前用户有create table 的权限。
应该要 把is改成as!
grant create,resourc to user;
Connected as scottSQL> desc d;
Object d does not exist.SQL>
SQL> begin
2 execute immediate 'create table d as select * from dual';
3 end;
4 /
PL/SQL procedure successfully completed
SQL> select * from d;
DUMMY
-----
X
SQL> desc dd;
Object dd does not exist.
SQL> SQL>
SQL> declare
2 v_sql varchar2(100);
3 begin
4 v_sql := 'create table dd is select * from dual';
5 execute immediate v_sql;
6 end;
7 /
declare
v_sql varchar2(100);
begin
v_sql := 'create table dd is select * from dual';
execute immediate v_sql;
end;
ORA-00922: 选项缺失或无效
ORA-06512: 在 line 6显然 is必须改成as
要不使用sys用户 执行下 看看什么效果
begin
EXECUTE IMMEDIATE 'CREATE TABLE T_GROUP_TEMP as select 1 from 你的表所属于的用户.T_GROUP where 1 >2';
end;
就这样执行
as
begin
EXECUTE IMMEDIATE 'CREATE TABLE T_GROUP_TEMP as select * from T_GROUP';
end; 前提是当前用户有建表和建存储过程的的权限。
报insufficient privileges肯定就是没有足够的权限.