option(errors=0)
LOAD DATA
INFILE "C:\CTLTEST\TEST.TXT"
TRUNCATE
INTO TABLE test.TABLE1
FIELDS TERMINATED BY ","
(ID,NAME,AGE) ****ID CHAR(5) NAME CHAR(10) AGE NUMBER(3)****
以上的代码我有2个问题想请问一下大家。
1.如果我现在要插入10条记录。但是第二条记录的AGE值是99999超出长度了。我认为这时SQLLOADER的ERRORS数应该等于1并且SQLLOADER终止了。但是我怎么才能够拿到这个ERRORS的值?因为我下面的程序需要判断SQLLOADER有没有出错来进行其他的处理。
2.如果我要插入的目标表中的字段有200个。那么有没有什么办法可以像用 INSERT INTO TABLE1 (SELECT * FROM TABLE2) 那样不用列出全部的字段名?
LOAD DATA
INFILE "C:\CTLTEST\TEST.TXT"
TRUNCATE
INTO TABLE test.TABLE1
FIELDS TERMINATED BY ","
(ID,NAME,AGE) ****ID CHAR(5) NAME CHAR(10) AGE NUMBER(3)****
以上的代码我有2个问题想请问一下大家。
1.如果我现在要插入10条记录。但是第二条记录的AGE值是99999超出长度了。我认为这时SQLLOADER的ERRORS数应该等于1并且SQLLOADER终止了。但是我怎么才能够拿到这个ERRORS的值?因为我下面的程序需要判断SQLLOADER有没有出错来进行其他的处理。
2.如果我要插入的目标表中的字段有200个。那么有没有什么办法可以像用 INSERT INTO TABLE1 (SELECT * FROM TABLE2) 那样不用列出全部的字段名?
INSERT INTO TABLE1 as SELECT * FROM TABLE2;
2: 可以查数据字典来找出表中所有的列:
SELECT COLUMN_NAME || ','
FROM ALL_TAB_COLUMNS
WHERE OWNER = UPPER('SCHEMA_NAME')
AND TABLE_NAME = UPPER('TABLE_NAME');
然后再拷贝到control文件中便可.
2.不可以,必须依次指定.
我目前对于SQLLOADER出错的判断是想用bad.txt这个文件的大小来判断。如果在执行好第一个SQLLOADER之后bad.txt的文件大小是0KB的话。那么我就认为SQLLOADER在刚才的执行过程中是全部正确的。如果大于OKB。那么就让下面的程序终止运行。不知道这个方法可以不可以?
其实我还是希望能够通过一个方法去得到ERRORS的值。因为这样做对我程序来说是最方便的了。(比如 if sqlloader.errors >0 then .....)毕竟要是生成bad.txt文件的话。最后我还必须要做一步删除的操作。PS:我现在的预想的程序结构是这样的,烦请大家帮忙参考下是否可行。谢谢。FUNCTION{
SQLLOADER1 --执行。
if bad.txt > 0KB THEN bad.txt --文件大小判断,大于0KB程序退出
EXIT FUNCTION
END IF
SQLLOADER2 --执行。
if bad.txt > 0KB THEN bad.txt --文件大小判断,大于0KB程序退出
EXIT FUNCTION
END IF
SQLLOADER3 --执行。
if bad.txt > 0KB THEN bad.txt --文件大小判断,大于0KB程序退出
EXIT FUNCTION
END IFBEGIN --事务开始SQL语句执行,出错的话回滚。commit --提交事务
}另外,再请教一下各位。在VB.NET中用什么方法可以直接调用CTL这个文件?我之前做的SQLLOADER的实验都是在CMD中直接打COMMAND命令语句完成的。在VB.NET中还没尝试过。
============================================================================================
需要列出字段名。还是看错了,原以为是这方面的问题:create table tabcopy1 as (select * from tabcopy where 1=0);