动态SQL 编写一个存储过程,要求实现如下功能      
输入参数:表名变量,参数类型为varchar2(200)      
实现功能  步骤一:在存储过程中使用动态语句,判断表名为输入的表名参数的这个表是否存在,如果不存在,
创建下面的表,如果存在,先删除掉该表,然后创建下面的表             
Createtable表名变量( t1 date,      T2 varchar2(10));  
步骤二:给这个表增加一个字段,字段名为t3,字段类型为varchar2(10)  
步骤三:修改这个表的字段t2的数据类型为number型  
步骤四:清空该表  
步骤五:往新建表中插入两条样本数据 
刘蕾  13:46:13
参考:要查找当前用户下的所有表,使用
Select * from user_tables

解决方案 »

  1.   

    --写一个吧
    --关键动态创建表时需要create table的权限,授权:
    --grant create table to test(存储过程所属用户)CREATE OR REPLACE PROCEDURE tableddl(tablename VARCHAR2) IS
      cnt NUMBER;
      v_sql varchar2(200);
    BEGIN
      cnt := 0;
      SELECT COUNT(1) INTO cnt FROM user_tables t WHERE t.TABLE_NAME = upper(tablename);
      IF cnt > 0 THEN
        EXECUTE IMMEDIATE 'drop table ' || tablename;
      END IF;
      v_sql := 'create table ' || tablename || '(t1 date, t2 varchar2(10))';
      EXECUTE IMMEDIATE v_sql;
      EXECUTE IMMEDIATE 'alter table ' || tablename || ' add (t3 varchar2(10))';
      EXECUTE IMMEDIATE 'alter table ' || tablename || ' modify (t2 number)';
      EXECUTE IMMEDIATE 'truncate table ' || tablename;
      EXECUTE IMMEDIATE 'insert into ' || tablename || '(t1,t3) values(' ||
                        'to_date(''2010-03-22 13:46:13'',''yyyy-mm-dd hh24:mi:ss''),''刘蕾'')';
      COMMIT;
    END tableddl;