存储过程可以这么写么?

guodong66 2010-05-16 04:53:59
这样可以不?


EXECUTE IMMEDIATE 'CREATE TABLE T_GROUP_TEMP is select * from T_GROUP';


如果不可以难道只能 先建立表 然后 每条insert ??
...全文
193 24 打赏 收藏 转发到动态 举报
写回复
用AI写文章
24 条回复
切换为时间正序
请发表友善的回复…
发表回复
sharpidd 2010-05-18
  • 打赏
  • 举报
回复
create or replace procedure sp_cr authid current_user
as
begin
EXECUTE IMMEDIATE 'CREATE TABLE T_GROUP_TEMP as select * from T_GROUP';
end;

前提是当前用户有建表和建存储过程的的权限。
报insufficient privileges肯定就是没有足够的权限.
guodong66 2010-05-17
  • 打赏
  • 举报
回复
语句粘贴出来可以执行,说明不是建表权限的问题。
guodong66 2010-05-17
  • 打赏
  • 举报
回复
我试下,OK 就结贴。
ojuju10 2010-05-17
  • 打赏
  • 举报
回复
楼主登陆的用户没有建表的权限
codearts 2010-05-17
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 vber1010 的回复:]
SQL code

create or replace procedure sp_cr authid current_user
is
begin
EXECUTE IMMEDIATE 'CREATE TABLE T_GROUP_TEMP as select * from T_GROUP';
end;

前提是当前用户有create table 的权限。
[/Quote]

权限问题,用这楼的方法解决。 2个名词:调用者权限、定义者权限,可以搜一下
RunCanRun 2010-05-17
  • 打赏
  • 举报
回复
EXECUTE IMMEDIATE 'CREATE TABLE T_GROUP_TEMP is select * from T_GROUP';

兄弟提示一下:把语句中的is 修改成 as 就可以了,祝您好运
Adebayor 2010-05-17
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 guodong66 的回复:]

改成 AS 后 报 insufficient privileges
[/Quote]
这个错误很显然 权限不足呀!!!
要不使用sys用户 执行下 看看什么效果
begin
EXECUTE IMMEDIATE 'CREATE TABLE T_GROUP_TEMP as select 1 from 你的表所属于的用户.T_GROUP where 1 >2';
end;
就这样执行
Adebayor 2010-05-17
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 guodong66 的回复:]
v_sql:='CREATE TABLE T_GROUP_TEMP is select * from T_GROUP'
EXECUTE IMMEDIATE v_sql;
[/Quote]
看看你的这种写法根本就通不过的
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
Adebayor 2010-05-17
  • 打赏
  • 举报
回复
Connected to Oracle Database 11g Enterprise Edition Release 11.1.0.6.0
Connected as scott

SQL> 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

Alessandro_ 2010-05-16
  • 打赏
  • 举报
回复


grant create,resourc to user;
Alessandro_ 2010-05-16
  • 打赏
  • 举报
回复



应该要 把is改成as!
vber1010 2010-05-16
  • 打赏
  • 举报
回复


create or replace procedure sp_cr authid current_user
is
begin
EXECUTE IMMEDIATE 'CREATE TABLE T_GROUP_TEMP as select * from T_GROUP';
end;
前提是当前用户有create table 的权限。
小灰狼W 2010-05-16
  • 打赏
  • 举报
回复
...晕了.这个是本用户下的表的话不会有查询权限问题
看下有没有建表权限,或者该表空间上有配额限制。如果建表权限是包含在某个角色里的话,用grant create table.. 对该用户显式授权
小灰狼W 2010-05-16
  • 打赏
  • 举报
回复
is要改成as,否则有语法错误
insufficient privileges说明权限不足
T_GROUP上的查询权限,或者是建表权限
假设当前用户名为user1,先登录具有dba权限的用户,执行
grant create table to USER1;
grant select on t_group to USER1;
然后再登录user1执行过程
guodong66 2010-05-16
  • 打赏
  • 举报
回复
下班回家了,明天来看,看到的帮帮忙,我肯定结贴(虽然分不多)
guodong66 2010-05-16
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 adebayor 的回复:]

引用楼主 guodong66 的回复:
这样可以不?

SQL code

EXECUTE IMMEDIATE 'CREATE TABLE T_GROUP_TEMP is select * from T_GROUP';



如果不可以难道只能 先建立表 然后 每条insert ??

这样写可以 不过最少要加上begin end
错误信息说明你没有权限 可能是建表……
[/Quote]

很确定权限是有的,
v_sql:='CREATE TABLE T_GROUP_TEMP is select * from T_GROUP'
EXECUTE IMMEDIATE v_sql;


这样时 v_sql的值粘贴出来执行是正确的
Adebayor 2010-05-16
  • 打赏
  • 举报
回复
[Quote=引用楼主 guodong66 的回复:]
这样可以不?

SQL code

EXECUTE IMMEDIATE 'CREATE TABLE T_GROUP_TEMP is select * from T_GROUP';



如果不可以难道只能 先建立表 然后 每条insert ??
[/Quote]
这样写可以 不过最少要加上begin end
错误信息说明你没有权限 可能是建表 或者是对T_GROUP的查询权限
oraclemch 2010-05-16
  • 打赏
  • 举报
回复
EXECUTE IMMEDIATE 'CREATE TABLE T_GROUP_TEMP as select * from T_GROUP';

guodong66 2010-05-16
  • 打赏
  • 举报
回复
改成 AS 后 报 insufficient privileges
zhangwonderful 2010-05-16
  • 打赏
  • 举报
回复
要给当前用户分配create any table权限
加载更多回复(4)
【为什么学爬虫?】        1、爬虫入手容易,但是深入较难,如何出高效率的爬虫,如何出灵活性高可扩展的爬虫都是一项技术活。另外在爬虫过程中,经常容易遇到被反爬虫,比如字体反爬、IP识别、验证码等,如何层层攻克难点拿到想要的数据,这门课程,你都能学到!        2、如果是作为一个其他行业的开发者,比如app开发,web开发,学习爬虫能让你加强对技术的认知,能够开发出更加安全的软件和网站 【课程设计】 一个完整的爬虫程序,无论大小,总体来说可以分成三个步骤,分别是:网络请求:模拟浏览器的行为从网上抓取数据。数据解析:将请求下来的数据进行过滤,提取我们想要的数据。数据存储:将提取到的数据存储到硬盘或者内存中。比如用mysql数据库或者redis等。那么本课程也是按照这几个步骤循序渐进的进行讲解,带领学生完整的掌握每个步骤的技术。另外,因为爬虫的多样性,在爬取的过程中可能会发生被反爬、效率低下等。因此我们又增加了两个章节用来提高爬虫程序的灵活性,分别是:爬虫进阶:包括IP代理,多线程爬虫,图形验证码识别、JS加密解密、动态网页爬虫、字体反爬识别等。Scrapy和分布式爬虫:Scrapy框架、Scrapy-redis组件、分布式爬虫等。通过爬虫进阶的知识点我们能应付大量的反爬网站,而Scrapy框架作为一个专业的爬虫框架,使用他可以快速提高我们编爬虫程序的效率和速度。另外如果一台机器不能满足你的需求,我们可以用分布式爬虫让多台机器帮助你快速爬取数据。 从基础爬虫到商业化应用爬虫,本套课程满足您的所有需求!【课程服务】 专属付费社群+定期答疑

17,377

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 基础和管理
社区管理员
  • 基础和管理社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧