有两个用户要求SQLULDR2能根据查询语句的结果给出建表的语法, 先提出要求的是一个国外网友, 当时没有理他, 这周一个国内网友也提出了同样的需求, 想想也比较合理, 于是就满足一下吧.
建表的语法会写在SQLLDR的控制文件中, 并不生成独立的SQL文件, 当我们运行如下命令.
sqluldr2 scott/tiger query=emp table=emp
得到的SQLLDR控制文件(emp_sqlldr.ctl)中, 就包含了建表语法, 如下所示.
--
-- SQL*UnLoader: Fast Oracle Text Unloader (GZIP), Release 3.0.1
-- (@) Copyright Lou Fangxin (AnySQL.net) 2004 - 2010, all rights reserved.
--
/*
CREATE TABLE emp (
EMPNO NUMBER(4),
ENAME VARCHAR2(10),
JOB VARCHAR2(9),
MGR NUMBER(4),
HIREDATE DATE,
SAL NUMBER(7,2),
COMM NUMBER(7,2),
DEPTNO NUMBER(2)
);
*/
OPTIONS(BINDSIZE=2097152,READSIZE=2097152,ERRORS=-1,ROWS=50000)
LOAD DATA
INFILE 'uldrdata.txt' "STR X'0a'"
INSERT INTO TABLE emp
FIELDS TERMINATED BY X'2c' TRAILING NULLCOLS
(
EMPNO CHAR(6) NULLIF EMPNO=BLANKS,
ENAME CHAR(10) NULLIF ENAME=BLANKS,
JOB CHAR(9) NULLIF JOB=BLANKS,
MGR CHAR(6) NULLIF MGR=BLANKS,
HIREDATE DATE "YYYY-MM-DD HH24:MI:SS" NULLIF HIREDATE=BLANKS,
SAL CHAR(10) NULLIF SAL=BLANKS,
COMM CHAR(10) NULLIF COMM=BLANKS,
DEPTNO CHAR(4) NULLIF DEPTNO=BLANKS
)
数据类型的准确性还有待验证, 并且只是Oracle的建表语法, CHAR和VARCHAR2也没有进行区分, 若有必要可进一步改善
有两个用户要求SQLULDR2能根据查询语句的结果给出建表的语法, 先提出要求的是一个国外网友, 当时没有理他, 这周一个国内网友也提出了同样的需求, 想想也比较合理, 于是就满足一下吧.
建表的语法会写在SQLLDR的控制文件中, 并不生成独立的SQL文件, 当我们运行如下命令.
sqluldr2 scott/tiger query=emp table=emp
得到的SQLLDR控制文件(emp_sqlldr.ctl)中, 就包含了建表语法, 如下所示.
--
-- SQL*UnLoader: Fast Oracle Text Unloader (GZIP), Release 3.0.1
-- (@) Copyright Lou Fangxin (AnySQL.net) 2004 - 2010, all rights reserved.
--
/*
CREATE TABLE emp (
EMPNO NUMBER(4),
ENAME VARCHAR2(10),
JOB VARCHAR2(9),
MGR NUMBER(4),
HIREDATE DATE,
SAL NUMBER(7,2),
COMM NUMBER(7,2),
DEPTNO NUMBER(2)
);
*/
OPTIONS(BINDSIZE=2097152,READSIZE=2097152,ERRORS=-1,ROWS=50000)
LOAD DATA
INFILE 'uldrdata.txt' "STR X'0a'"
INSERT INTO TABLE emp
FIELDS TERMINATED BY X'2c' TRAILING NULLCOLS
(
EMPNO CHAR(6) NULLIF EMPNO=BLANKS,
ENAME CHAR(10) NULLIF ENAME=BLANKS,
JOB CHAR(9) NULLIF JOB=BLANKS,
MGR CHAR(6) NULLIF MGR=BLANKS,
HIREDATE DATE "YYYY-MM-DD HH24:MI:SS" NULLIF HIREDATE=BLANKS,
SAL CHAR(10) NULLIF SAL=BLANKS,
COMM CHAR(10) NULLIF COMM=BLANKS,
DEPTNO CHAR(4) NULLIF DEPTNO=BLANKS
)
数据类型的准确性还有待验证, 并且只是Oracle的建表语法, CHAR和VARCHAR2也没有进行区分, 若有必要可进一步改善