【发布时间】:2017-10-24 16:28:46
【问题描述】:
我的存储过程失败,我正在尝试将时间戳转换为日期。
create or replace PROCEDURE "USP_CLEAN_FOBTPP"
AS
BEGIN
INSERT INTO CLN_FOBTPP
SELECT PART_PAYMENT_ID,
ISSUING_SHOP,
TILL_NUMBER,
SLIP_NUMBER,
FOBT_NUMBER,
WHO_PAID,
to_date(WHEN_PAID,'DD-MON-YY HH24:MI:SS'),
AMOUNT_LEFT_TO_PAY,
FOBT_VALUE,
STATUS
FROM IMPORTDB.IMP_FOBTPP;
COMMIT;
END;
这是我得到的错误:
ORA-01830: 日期格式图片在转换整个输入之前结束 字符串。
这是When_Paid日期列的格式
11-OCT-17 13.29.20.000000000
11-OCT-17 13.30.21.000000000
11-OCT-17 13.31.11.000000000
11-OCT-17 12.56.39.000000000
11-OCT-17 12.57.28.000000000
11-OCT-17 12.57.46.000000000
出了什么问题?
Source Table IMPORTDB.IMP_FOBT
Name Null? Type
------------------ ----- ------------
PART_PAYMENT_ID NUMBER(38)
ISSUING_SHOP CHAR(4)
TILL_NUMBER NUMBER(3)
SLIP_NUMBER NUMBER(38)
FOBT_NUMBER VARCHAR2(30)
WHO_PAID CHAR(20)
WHEN_PAID TIMESTAMP(6)
AMOUNT_LEFT_TO_PAY NUMBER(19,4)
FOBT_VALUE NUMBER(19,4)
STATUS CHAR(2)
Destination Table IMPORTDB.CLN_FOBTPP
Name Null? Type
------------------ -------- ------------
PART_PAYMENT_ID NOT NULL VARCHAR2(4)
ISSUING_SHOP NOT NULL VARCHAR2(4)
TILL_NUMBER NOT NULL NUMBER(3)
SLIP_NUMBER NOT NULL VARCHAR2(4)
FOBT_NUMBER NOT NULL VARCHAR2(30)
WHO_PAID NOT NULL CHAR(20)
WHEN_PAID NOT NULL DATE
AMOUNT_LEFT_TO_PAY NOT NULL NUMBER(19,4)
FOBT_VALUE NOT NULL NUMBER(19,4)
STATUS NOT NULL CHAR(2)
这是表结构。
【问题讨论】:
-
WHEN_PAID列的数据类型是什么?如果它是date(看起来是这样),那就离开它,不要应用to_date()函数,否则它会通过双重转换:date -> character -> back to date。在这种情况下,各种 NLS 参数的值开始发挥作用NLS_DATE_FORMAT, NLS_LANGUGAE, NLS_TERRITORY -
When_Paid 的数据类型是源表中的 Timestamp,我要加载数据的表中的日期。
-
我已经包含了表定义。
-
真是巧合!我刚刚听到一位同事迟到了,因为他被困在解决同样的 ORA 错误中
-
哈哈,我是 PL-SQL 和 oracle 的新手,但这让我很困惑接下来要尝试什么。
标签: oracle function stored-procedures