【发布时间】:2017-04-30 11:17:53
【问题描述】:
我有一个简单的 PL SQL 代码。但是,它在日期级别上失败了。日期列是 CODT。我宣布 CODT 为日期。在数据库级别,它是格式为 YYYY-MM-DD 的日期。
我也尝试了 alter session set nls_date_format = 'YYYY-MM-DD';但它正在抛出错误。
错误信息是ORA-01830:日期格式图片在转换整个输入字符串之前结束
- 00000 - “日期格式图片在转换整个输入字符串之前结束”
您能告诉我我需要在哪里将其更改为日期格式/我在哪里犯了错误吗?
DECLARE
RID VARCHAR2(100);
KY VARCHAR2(200);
CODT DATE;
CURSOR FETCH_DTLS IS
SELECT ROW_ID,
KEY,
CUT_OFF_DT,
FROM TMP1
WHERE RN = 1;
BEGIN
OPEN FETCH_DTLS;
LOOP
FETCH FETCH_DTLS
INTO RID,
KY,
CODT;
EXIT WHEN FETCH_DTLS%NOTFOUND;
INSERT INTO tmp2
VALUES
(RID,
KY,
CODT
);
END LOOP;
COMMIT;
CLOSE FETCH_DTLS;
COMMIT;
END;
【问题讨论】:
-
表
tmp1中CUTT_OFF_DT的数据类型是什么?不要假设也不要猜测;运行describe tmp1看看它告诉你什么。提示:您在数据库级别提到它是“格式”。 DATE 数据类型中的列没有格式。很可能在数据库级别您有某种字符串(可能是 VARCHAR2),而不是日期。如果是这样,您必须先将其转换为日期。 -
是的,在 TMP1 表中,它是 VARCHAR2(50 CHAR)。但在 TMP2 表中,它是 DATE。
-
完美。然后将
SELECT中的CUT_OFF_DT替换为to_date(CUT_OFF_DT, 'yyyy-mm-dd')。那应该可以解决它。