【发布时间】:2018-04-11 12:52:34
【问题描述】:
我有一张包含数百万条记录的表。我正在尝试将一列数据格式化为DATE 格式
目前在VARCHAR2。但是,我收到 ORA-01843 not a valid month 错误。
我正在尝试获取导致 ORA-01843 的那些记录
CREATE OR REPLACE PROCEDURE pr_TEST_CUSTOM_ORA1843 AS
v_company MyTable.MyColumn%TYPE;
BEGIN
BEGIN
SELECT to_char(to_date(TRIM(MyColumn), 'YYMMDD'), 'MM/DD/YYYY')
INTO v_company FROM MyTable;
EXCEPTION
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE('ORA-01843 caused by'||v_company);
END;
END pr_TEST_CUSTOM_ORA1843;
但是,v_company 的值没有打印出来。
如何获取导致 ORA-01843 错误的记录?
【问题讨论】:
-
一种方法——相当麻烦——是编写一个函数,一次转换一个值。当不匹配时让它返回
NULL,然后在输出中查找NULL值。 -
看到填充 v_company 的 SELECT 语句刚刚失败,为什么您希望 v_company 包含任何内容?也许尝试输出 MyColumn?
-
为什么需要TRIM?该列中的值是否有多余的空格?那么 - 列中字符串的格式是什么?是 YYMMDD 吗?
标签: sql oracle plsql error-handling