从数据库表中提取不同日期的数据文件

时间:2014-11-28 12:57:51

标签: oracle11g

我在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

1 个答案:

答案 0 :(得分:0)

我终于能够实现我想要的目标了。以下是步骤(可能不是最有效的步骤,但确实有效:))

  1. 创建了一个SQL脚本,用于假脱机查找我想要的数据(一天)。
  2. 设置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
    
    1. 我创建了一个名为content.txt的文件,其中我填充了本地时间戳值(即交易日期时间戳为

      20141007000000 20140515000000 20140515000000

    2. 最后我在powershell上使用了一个循环,它从content.txt中获取了一个值,然后调用了sql脚本(从步骤1开始)并传递了参数:

    3. 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}
      

      就是这样!

      我仍然需要改进一些事情,但至少分裂数据的想法是有效的:)

      希望这有助于其他寻找类似事物的人。