PERL DBI:将.pl插入Oracle DB的to_date函数转换为测试变量

时间:2015-02-01 16:24:12

标签: sql perl date dbi

首先非常感谢这个精彩网站上的所有PERL专家;我学到了很多。

我有一个小的“翻译”问题;

我的.pl脚本按顺序执行这些任务:

  1. 阅读.txt文件(现实生活中的日志)
  2. 正则表达式清理并在内存变量中存储一些信息
  3. 逐行阅读时插入Oracle表
  4. 正常完成后退出并断开连接。
  5. Table有8列,其中一个是事件的存储日期和时间,我在sql中声明的格式是:

    DATETIME_EVENT VARCHAR2(255 BYTE) DEFAULT NULL NOT NULL 
    

    你可以清楚地看到我的位置......

    所以上面的第3点执行这个块:

    my $sth = $dbh->prepare('INSERT INTO myTable(TIME_ISSUE,col2,col3,col4,col5,col6,col7,col8) VALUES (?, ?, ?, ?, ?, ?, ?, ?)');
    

    示例插入IS:2014-09-19 00:03:58,562

    一切都很顺利,但我稍后会执行一系列查询;但我必须在SQL中使用to_date函数进行翻译,以将TIME_ISSUE列解释为datetime TYPE。

    AS:

    select to_date(SUBSTR(TIME_ISSUE,0,19) ,'YYYY-MM-DD HH24:MI:SS' ) from myTable;
    

    输出:19/09/2014 23:59:56

    如果我将table.column创建为datetime类型,我如何编写上面的perl插入块以便将txt插入到datetime类型中?

    我试过但根本不工作:

    my $sth = $dbh->prepare('INSERT INTO REQUEST (TO_DATE(SUBSTR(DATETIME_EVENT ,0,19), 'YYYY-MM-DD HH24:MI:SS'),LOG_LEVEL,LOGONID, CLIENTID, USERID,IPADDRESS,DURATION,CLASSMETHOD) VALUES (?, ?, ?, ?, ?, ?, ?, ?)')
    

    P.S。

    你可以假设,如果我运行上面的perl,我之前已经创建了这个列:

    TIME_ISSUE   DATE DEFAULT NOT NULL                       
    

2 个答案:

答案 0 :(得分:2)

您还可以更改会话的日期格式。例如,在Perl DBI中,这很有用,其中to_date()函数不可用:

ALTER SESSION SET NLS_DATE_FORMAT='YYYY-MM-DD HH24:MI:SS'

您也可以永久设置默认的nls_date_format:

ALTER SYSTEM SET NLS_DATE_FORMAT='YYYY-MM-DD HH24:MI:SS'

在Perl DBI中,您可以使用do()方法运行这些命令:

$db->do("ALTER SESSION SET NLS_DATE_FORMAT='YYYY-MM-DD HH24:MI:SS');

http://www.dba-oracle.com/t_dbi_interface1.htm https://community.oracle.com/thread/682596?start=15&tstart=0

答案 1 :(得分:1)