|
"朴素一点说,使用这个工具就是要不写列名!......我这个程序根本就写不出列名,因为我根本不知道要加载什么表!"
这是缺点,不是优点。当然这是我们搞数据库的人的观点。
"这是程序员最初的要求,能否一句话插入一行数据?"
一个INSERT罢了,有什么难的。
"你发现insrec的代码,比PL/SQL还要优化?游标(sth)一旦打开,以后就根本没有SQL语句了,引擎连寻找语句池的工夫都省了,我们的例子,节省了30%的时间。"
但是你的INSREC是在LOADFILE循环调用的呀? 你每一行都要调用INSREC, 每次都重新打开游标,重新生成SQL!
(后记: 我发现你sth用的是static, 确实是可以重复利用的, 是我弄错了)
PL/SQL是真正的CACHE游标(即使关闭了也是假关闭,后面还可再次利用),而且对程序员是透明的,使用更为方便。其他语言无法做到。
"你说的load append什么意思?追加?追加就错了。如果一行数据存在,就要用新数据覆盖之。我的逻辑你应该看的很明白呀."
我说过了,覆盖可用MERGE INTO来实现。先加载到临时表,再MERGE INTO. 比你逐行判断好。
最好的办法是用外部表,把文本文件上传到ORACLE服务器,直接MERGE INTO.
"数据加载只是个例子,这种通用的活还很多,这个东西要衍生出很多半通用或专用的工具。未来我们有数不清的需求你不编程都能实现?
比方按时间戳加载,在在数据库和加载文件之间,谁的时间戳新就加载谁。
比方按同步标志卸载和加载,比方按时间段加载,在加载数据和被加载数据之间时间段如果不重合,那就要重新分段等等。它们的表名和结构都不确定(会有不止一个表),只能确定部分加载属性,你用SQLload怎么解决?"
随便什么需求,只要你提出来就可以解决。SQLLOADER/外部表+存储过程。集合操作,绝对最高效,最少代码。
"最好的程序是不写程序!这是我的信条,我经常宣传这个观点。"
我前面也说过。你上面说的复杂需求,你的通用写程序要如何实现?举个例子看看。
[ 本帖最后由 newkid 于 2008-12-21 02:30 编辑 ] |
|