本人新手,要做一个存储过程传入参数,通过参数作为表名建表,判断这个表是否存在,如果不存在,创建该表,如果存在,先删除掉该表,然后创建该表
create or replace procedure ddltest 
 ( tbl_name in varchar2)
 authid current_user as 
 num number;
 begin 
select count(1) into num from user_tables where table_name=tbl_name;
if num=1 then
execute immediate 'drop table '||tbl_name;
end if;
execute immediate 'create table'||tbl_name||'(t1 date,
t2 varchar2(10))';
 end;begin
  ddltest('TEST_LIKE');
  end;报错:ORA 00901:无效CREATE命令

解决方案 »

  1.   

    execute immediate 'create table'||tbl_name||'(t1 date,
    t2 varchar2(10))';
    测了下,这个 'create table'  table后面加个空格   'create table '。
      

  2.   

    create table后面加个空格,另外最好用using配合动态sql吧,直接拼接不太好
      

  3.   

    drop 时写了空格,create 时没写空格这个问题, 你可以execute 之前,用 dbms_output.put_line 打印一下,比较直观;
      

  4.   

    create table后面加个空格  这个正解哈!!!另外,
    好建议!!!
    我再给个建议,如果表很多,而且字段不一样的话,建议弄个配置表!
      

  5.   

    注意空格。
    'create table'||tbl_name||'(t1 date,t2 varchar2(10))';
    拼接出来的结果是
    create tabletbl_name(t1 date,t2 varchar2(10));