解决方案 »

  1.   

    将insert 语句也修改成execute immediate方式执行。否则回提示表不存在。。
    因为编译的时候还寻找不到表对象。。
      

  2.   


    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;
      

  3.   


    修改之后这样,运行还是出现这个提示。
    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;
    /
      

  4.   


    修改之后这样,运行还是出现这个提示。
    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;
    /
    '引号得转义,用我给你写的那个
      

  5.   

    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;
    执行通过,没有报错啊。
    楼主看看是不是你的英文符号哪里写成了中文的了
      

  6.   

    没有写错,name一列的数据 再加上单引号就行了
      

  7.   

    没有写错,name一列的数据 再加上单引号就行了
    没注意看,这段SQL编译能通过,执行时候会报错。找不到表或者视图。二楼说的是对的
      

  8.   

    这段代码是没有问题的,现在出现另外一种情况
    执行这个存储过程,提示权限不足。
    我同样的情况创建另外的存储过程是可以正常执行的。是不是代码本身的问题?
    你可以看看,需要create any table权限
      

  9.   

    这段代码是没有问题的,现在出现另外一种情况
    执行这个存储过程,提示权限不足。
    我同样的情况创建另外的存储过程是可以正常执行的。是不是代码本身的问题?
    你可以看看,需要create any table权限
    单独试了一下创建表的语句,是可以成功的
      

  10.   

    单独试验所有的sql都好用么。。你把提示的权限不足内容贴出来看看。。
      

  11.   


    给了权限之后 就可以了。还是存在迷惑,为什么sql 命令执行就可以创建表,而在执行存储过程就不能。
      

  12.   


    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));表已创建。
      

  13.   

    你是再scott下执行的是么,我试一下。。
      

  14.   

    是的。后来换到system as sysdba下就正常运行了
      

  15.   

    我才试验了一下,只要scott有create any table权限,就可以正常执行。。
      

  16.   

    不知道,我试了一下 sql语句就可以创建表,上面的存储过程就不行。权限提升之后就可以正常运行。
      

  17.   

    不知道,我试了一下 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的所有权限,运行存储过程没问题,你再试试吧。。
      

  18.   

    不知道,我试了一下 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;  加了这个权限,当然是可以的啦.
      

  19.   

    哎,你纠结的是这个啊。。
    oracle就是这么设计的,再存储过程中必须显示的授权。
    也是管理最终用户,区别于其他角色的一种策略。。
      

  20.   


    呵呵.你这样实现,和下面的实现的方式应该也是可以达到同样的效果
    connect scott as sysdba
    不纠结了。