【发布时间】:2020-04-14 20:52:50
【问题描述】:
表创建脚本:
CREATE TABLE "TEST"("INTERVAL_COL" INTERVAL DAY (0) TO SECOND (6));
Insert into TEST (INTERVAL_COL) values ('+00 11:00:24.920000');
Insert into TEST (INTERVAL_COL) values ('+00 11:00:26.890000');
Insert into TEST (INTERVAL_COL) values ('+00 11:00:28.460000');
Insert into TEST (INTERVAL_COL) values ('+00 11:00:30.140000');
Insert into TEST (INTERVAL_COL) values ('+00 11:00:31.790000');
commit;
在 SQL Developer 和 sqlPlus 中,运行 SELECT * FROM TEST 可以正常工作,SELECT INTERVAL_COL FROM TEST 也是如此。
但是,以下任何一个都会给我一个错误:
SELECT INTERVAL_COL || '.' FROM TEST
SELECT TO_CHAR(INTERVAL_COL, 'HH24:MM.SS') FROM TEST
错误是:
ORA-01877: 字符串对于内部缓冲区来说太长
【问题讨论】:
-
这很奇怪,看起来可能是一个错误,尽管我看不到已发布。它似乎特别不喜欢
day(0)。您可以强制转换为不受限制的间隔......但是您不能以与格式化日期或时间戳相同的方式格式化间隔,因此您要么必须操纵它来获取日期/时间戳,要么提取组件和用它们构建一个字符串 (as here)。 -
但是您会期望
SELECT INTERVAL_COL || '.' FROM TEST开箱即用,对吧?我可以在任何地方向 Oracle 报告此问题吗? -
您可以通过 support.oracle.com 提出服务请求,但您需要一个帐户和一份支持合同。
-
你传递的是一个字符串,而不是一个区间。
INSERT INTO TEST (INTERVAL_COL) VALUES (INTERVAL '+00 11:00:24.920000' DAY TO SECOND); -
@WernfriedDomscheit 插入工作正常,并创建了一个有效的间隔 - 这不是问题
标签: oracle oracle12c intervals to-char