ORACLE SQLLOADER,引用计算值

时间:2013-07-05 15:36:45

标签: performance oracle function sql-loader

希望你过得愉快。我正在学习如何在SQL-LOADER上使用函数,我对它有一个问题,让我说我有这个表

table a
--------------
code
name
dept
birthdate
secret

data.csv文件包含此数据

name
dept
birthdate

我正在使用此代码使用SQLLOADER

将数据加载到它
LOAD DATA
INFILE "data.csv"
APPEND INTO TABLE a;
FIELDS TERMINATED BY ',' optionally enclosed by '"'
TRAILING NULLCOLS
(code "getCode(:name,:dept)",name,dept,birthdate,secret "getSecret(getCode(:name,:dept),birthdate)")

所以这就像魅力它从我的getCode和getSecret函数中获取值,但是,我想引用先前计算的值(通过getCode),所以我不必在getSecret上嵌套函数,如下所示:

getSecret(**getCode(:name,:dept)**,birthdate)

我试过这样做:

getSecret(**:code**,birthdate)

但它从文件中获取原始值(意味着为null)而不是由函数计算(猜测因为它是在运行中),所以我的问题是,是否有办法避免以前的这些嵌套调用计算值,所以我不必松散性能一遍又一遍地重新计算相同的值(真正的表我使用它像10倍大,并且为这些先前计算的值嵌套了很多函数,所以我想这会减少性能)

任何帮助将不胜感激,谢谢!!


补体

很抱歉,我之前没有使用外部表(有点新的),我怎么能用这个表实现呢? (考虑我需要从我开发的函数获得的所有计算值,尝试触发器(SQL Loader, Trigger saturation?),杀死数据库......)

1 个答案:

答案 0 :(得分:1)

我不知道这样做的方法。

如果你切换到使用外部表,你可以更自由地使用这种东西 - 常见的表表达式,利用子查询缓存,这种东西。