Plsql - 评估动态字​​符串

时间:2017-01-19 11:37:12

标签: oracle plsql dynamic-sql ddl

我需要构建一个动态创建表的进程。

我有这个:

declare
type array is table of varchar2(30) index by binary_integer;
  a array;
  expression varchar2(2000);
  RESUME_create LONG;  

procedure createTables ( texto in VARCHAR2 ) is 
    begin 
      dbms_output.put_line('the parameter is: ' || texto);
      expression := 'begin ' || texto || '; end;';
      dbms_output.put_line(expression);
      execute immediate expression;    
    end;

RESUME_create   := 'CREATE TABLE RESUME (
     R_Resume_date          DATE         DEFAULT SYSDATE NOT NULL ,
     R_Resume_source        CHAR(3)      DEFAULT ''001'' NOT NULL ,
     R_Resume_channel       CHAR(3)      DEFAULT ''001'' NOT NULL )';  

  createTables('RESUME_create');
end;
/

所以这只是一个例子。

因此想象一下,我需要声明多次CREATE TABLE并将createTable调用为一个循环,传递函数必须评估和执行的多重字符串。

1 个答案:

答案 0 :(得分:0)

如果我不理解,您需要运行存储在集合中的一组DDL语句。如果是这样,你可以使用类似的东西:

declare
    type   tArray is table of varchar2(1000) index by pls_integer;
    vArray tArray ;
begin
    vArray(1) := 'create table firstTab  ( a number, b number)';
    vArray(2) := 'create table secondTab ( c number, d varchar2(10))';
    --
    for i in vArray.first .. vArray.last loop
        execute immediate vArray(i);
    end loop;
end;
/