我可以一次在程序中创建具有不同名称的表吗

时间:2018-07-15 14:25:47

标签: oracle plsql

我写了

create or replace procedure crab
    (no in number, name in varchar2, marks in number)
as
begin
    create table customer (no number(6),name varchar2 (12),marks number (3));
end;

2 个答案:

答案 0 :(得分:1)

尽管您可以这样做,但您很可能应该这样做。你怎么会这就是您的问题下的建议所暗示的内容。在Oracle中,除非有充分的理由这样做,否则通常不会动态地创建表。你是什​​么原因?

无论如何,这是一个显示如何的示例。

SQL> create or replace procedure crab as
  2  begin
  3    execute immediate 'create table tab1 (no number(6), name varchar2(12))';
  4    execute immediate 'create table tab2 (no number(6), name varchar2(12))';
  5    -- etc.
  6  end;
  7  /

Procedure created.

SQL> begin
  2    crab;
  3  end;
  4  /

PL/SQL procedure successfully completed.

SQL> select * from tab where tname in ('TAB1', 'TAB2');

TNAME                          TABTYPE  CLUSTERID
------------------------------ ------- ----------
TAB1                           TABLE
TAB2                           TABLE

SQL>

答案 1 :(得分:0)

如果需要从过程中执行DDL,则需要动态SQL。

例如:

...
Begin
  execute immediate 'Create table customer (no number(6),name varchar2(12),marks number(3))';
End;

无论输入参数如何,这都会创建一个表,该表具有用动态DDL编写的列名和类型。