Oracle PL / SQL过程表代码

时间:2014-07-11 14:17:50

标签: sql oracle plsql procedure

我的oracle数据库中有一个表用户:

|------|--------------|-------------------------|----------------|
|  ID  |     NAME     |          EMAIL          |    BIRTHDAY    |
|------|--------------|-------------------------|----------------|
|  1   |     Joe      |       joe@test.com      |   1986-10-13   |
|------|--------------|-------------------------|----------------|
|  2   |    Julie     |     julie@test.com      |   1990-05-07   |
|------|--------------|-------------------------|----------------|
|  3   |     Dan      |       dan@test.com      |   1988-10-20   |
|------|--------------|-------------------------|----------------|

如何创建将返回的过程pr_export():

CREATE TABLE USERS(ID NUMBER, NAME VARCHAR2(50), EMAIL VARCHAR2(50), BIRTHDAY DATE,  CONSTRAINT users_pk PRIMARY KEY (id));

INSERT INTO USERS VALUES (1, 'Joe', 'joe@test.com', to_date(1986-10-13, 'YYYY-MM-DD'));
INSERT INTO USERS VALUES (2, 'Julie', 'julie@test.com', to_date(1990-05-07, 'YYYY-MM-DD')); 
INSERT INTO USERS VALUES (3, 'Dan', 'dan@test.com', to_date(1988-10-20, 'YYYY-MM-DD'));

我读了一个我可以使用的提示:

select * from user_tab_cols where table_name = 'USERS';

和游标,但我不知道如何创建过程。

谢谢!!!

1 个答案:

答案 0 :(得分:1)

程序的前半部分pr_export()可以使用DBMS_METADATA - 界面:

SELECT dbms_metadata.get_ddl('TABLE','USERS') FROM dual;

输出如下:

CREATE TABLE "USERS" ("ID" NUMBER, "NAME" VARCHAR2(50 CHAR), "EMAIL" VARCHAR2(50 CHAR), "BIRTHDAY" DATE)

您可以使用以下参数调整输出:

dbms_metadata.set_transform_param (dbms_metadata.session_transform,'STORAGE',false);
dbms_metadata.set_transform_param (dbms_metadata.session_transform,'TABLESPACE',false);
dbms_metadata.set_transform_param (dbms_metadata.session_transform,'SEGMENT_ATTRIBUTES', false);
dbms_metadata.set_transform_param (dbms_metadata.session_transform,'REF_CONSTRAINTS', FALSE);
dbms_metadata.set_transform_param (dbms_metadata.session_transform,'CONSTRAINTS', FALSE);
dbms_metadata.set_transform_param (dbms_metadata.session_transform,'PRETTY',FALSE);
dbms_metadata.set_transform_param (dbms_metadata.session_transform,'SQLTERMINATOR',TRUE);

有关详情:http://docs.oracle.com/cd/E11882_01/appdev.112/e25788/d_metada.htm

要在过程之外使用dbms_metadata.set_transform_param,只需用匿名块包围它:

BEGIN
  dbms_metadata.set_transform_param(...);
END;
/