我写了
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;
答案 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编写的列名和类型。