我在Windows和Oracle 11.0.2上 我有一个表 TEMP_TRANSACTION 包含6个月左右的交易。每条记录都有一个交易日期和其他数据。
现在我要做以下事情: 1.从表中提取每个交易日期的数据 2.创建一个包含交易日期名称的平面文件; 3.将此交易日期的数据输出到平面文件; 4.转到下一个日期,然后再次执行步骤1-3。
我创建了一个简单的sql脚本来将数据假脱机以获得交易日期,并且它可以正常工作。现在我想将它放在一个循环或类似的东西中,以便它为每个事务日期进行迭代。
我知道这是从头开始要求的东西,但我需要指明如何继续。
我手头有Powershell,Java,无法访问Unix。
请帮忙!
编辑:删除了powershell,因为我的主要目标是从Oracle(PL / SQL)中获取它,如果没有,那么请探索Powershell或Java。
-Abhi
答案 0 :(得分:0)
我终于能够实现我想要的目标了。以下是步骤(可能不是最有效的步骤,但确实有效:))
设置colsep'|'
column spoolname new_val spoolname;
select 'TRANSACTION_' || substr(&1,0,8) ||'.txt' spoolname from dual;
set echo off
set feedback off
set linesize 5000
set pagesize 0
set sqlprompt ''
set trimspool on
set headsep off
set verify off
spool &spoolname
Select
''||local_timestamp|| ''||'|'||Field1|| ''||'|'||field2
from << transaction_table >>
where local_timestamp = &1;
select 'XX|'|| count(1)
from <<source_table>>
where local_timestamp = &1;
spool off
exit
我创建了一个名为content.txt的文件,其中我填充了本地时间戳值(即交易日期时间戳为
20141007000000
20140515000000
20140515000000
最后我在powershell上使用了一个循环,它从content.txt中获取了一个值,然后调用了sql脚本(从步骤1开始)并传递了参数:
PS C:\TEMP\data> $content = Get-Content C:\TEMP\content.txt
PS C:\TEMP\data> foreach ($line in $content){sqlplus user/password '@C:\temp\ExtractData.sql' $line}
就是这样!
我仍然需要改进一些事情,但至少分裂数据的想法是有效的:)
希望这有助于其他寻找类似事物的人。