我使用pl / sql过程调用webservice。这个webservice给我一个大的csv-string,我把它放在clob中。由于我不想用脚解析csv,我想到使用外部表。所以我需要做的是将csv数据存储在相应的表中。
我目前正在做的是,我使用utl_file存储clob。存储的文件在外部表中定义。好的,当我是唯一一个非常好用的用户时。但由于DB是多用户,我必须注意是否有其他人正在调用该过程并覆盖外部表数据源文件。什么是避免表数据源混乱的最佳方法?或者将cvs-sting存储到表中的最佳方法是什么?
由于 克里斯
答案 0 :(得分:1)
您希望确保该过程最多只能运行一个会话。有几种方法可以实现这一目标:
DBMS_LOCK
包来请求特定于您的程序的锁。使用DBMS_LOCK.request
过程请求锁定。您可以要求锁定仅在会话结束时释放(这将允许进行中间提交)。答案 1 :(得分:0)
也许你应该为每个CSV生成临时文件名?类似的东西:
SELECT TO_CHAR(systimestamp, 'YYYYMMDDHH24MISSFF') filename FROM dual
答案 2 :(得分:0)
您可以使用UTL_FILE.FRENAME。
在类似情况下,我将external_table指向一个文件(例如“fred.txt”)。 当我获得一个新的源文件时,我使用UTL_FILE.FRENAME尝试将其重命名为fred.txt。如果重命名失败,则另一个进程正在运行,因此您将返回忙碌错误或等待或等等。
文件处理完毕后,我再次重命名(通常带有一些date_timestamp)。