【发布时间】:2016-11-07 08:16:33
【问题描述】:
我想在 oracle 数据库版本 11.2.0.4 上的 PL/SQL ETL 进程内将数据插入带有时间戳列的表中
如果我在 Toad 中运行“从所选行创建 INSERT”,我会得到以下 SQL 命令:
Insert into xxxx$1
(ID, ITEM, ITEMSIZE, QUALITY, MATERIAL,
COLOUR, IMAGEURL, CREATIONDATE, SAMPLEITEMNUMBER, ITEMNUMBER)
Values
(111, 339079775, '1', 'Microfaser PRIMABELLE®', 'TEXTILE',
'1 (=creme)', 'url', TO_TIMESTAMP('27.06.2016 15:49:35.000000','DD.MM.YYYY HH24:MI:SS.FF'), 'xxx', 'xxxx');
COMMIT;
在 PL/SQL 中,我生成了一个 VARCHAR2/String,看起来与此类似:
v_sql :=
'INSERT INTO xxxx'
|| p_importpostfix
|| ' VALUES ('
|| seq_xxxx.NEXTVAL
|| ','
|| v_rec.item_id
|| ', '''
|| v_size
|| ''','''
|| v_quality
|| ''','''
|| v_material
|| ''','''
|| v_colour
|| ''','''
|| NULL
|| ''',to_timestamp('''|| to_char( sysdate, 'DD.MM.YYYY HH24:MI:SS')||''',''DD.MM.YYYY HH24:MI:SS.FF''),'''
|| v_rec.vid
|| ''','''
|| v_rec.vid
|| ''')';
如果我在整个过程之外单独运行该过程,它可以正常工作。 没有错误发生。
如果我运行由数据库 JOB 启动的完整进程,我将得到一个 ORACLE:
ORA-01843: 不是一个有效的月份错误。
我已阅读有关此问题的其他线程,但不了解我的问题。
【问题讨论】:
-
v_sql 的输出在您的程序中为您提供了什么?如果您还没有登录您的程序,请使用 dbms_output.put_line 输出它。
-
好吧,我已经登录了我的应用程序。我将异常记录在一个单独的表中。我有缺陷的那一行。但是 SQL 看起来不错。我已将其记录在 LOG 表中,在使用 dbms_output.put_line 打印输出之前
-
这些作业是在同一个数据库中运行还是我们有不同的数据库用于示例。
-
不妨试试 trunc(systimestamp)
-
如果您有日志记录,请将 v_sql 的内容写到您的表中,以便您可以查看生成的语句。这应该对帮助您调试问题大有帮助。
标签: database oracle plsql oracle11g toad