【发布时间】:2011-08-01 18:25:38
【问题描述】:
我在尝试合并 PL/SQL 中两个表中的两列时遇到了极大的困难。我从早上 9:00 开始一直在做这件事,我放弃了,请帮助我。
目的
我想创建一个新表(称为 temp)。这会将来自两个不同表中其他两列的信息合并。
到目前为止的代码
CREATE TABLE temp
(
temptimeKey CHAR(24) NOT NULL ,
temptimeHour INTEGER NULL ,
temptimeMinute INTEGER NULL ,
temptimeSecond INTEGER NULL ,
temptimeMonth INTEGER NULL ,
temptimeDay INTEGER NULL ,
temptimeYear INTEGER NULL ,
temptimeQuarter INTEGER NULL ,
CONSTRAINT XPKTEMPTIME PRIMARY KEY (temptimeKey)
);
insert into temp
SELECT
TO_CHAR(busFareDate, 'MM/DD/YYYY HH:MM:SS Q'),
TO_NUMBER(TO_CHAR(busFareDate, 'HH12')),
TO_NUMBER(TO_CHAR(busFareDate, 'MI')),
TO_NUMBER(TO_CHAR(busFareDate, 'SS')),
TO_NUMBER(TO_CHAR(busFareDate, 'MM')),
TO_NUMBER(TO_CHAR(busFareDate, 'DD')),
TO_NUMBER(TO_CHAR(busFareDate, 'YYYY')),
TO_NUMBER(TO_CHAR(busFareDate, 'Q'))
FROM
bus_fare
UNION
SELECT
TO_CHAR(trainFareDate, 'MM/DD/YYYY HH:MM:SS Q'),
TO_NUMBER(TO_CHAR(trainFareDate, 'HH12')),
TO_NUMBER(TO_CHAR(trainFareDate, 'MI')),
TO_NUMBER(TO_CHAR(trainFareDate, 'SS')),
TO_NUMBER(TO_CHAR(trainFareDate, 'MM')),
TO_NUMBER(TO_CHAR(trainFareDate, 'DD')),
TO_NUMBER(TO_CHAR(trainFareDate, 'YYYY')),
TO_NUMBER(TO_CHAR(trainFareDate, 'Q'))
FROM
train_fare;
drop table temp cascade constraints;
到目前为止,这段代码只给了我一个违反唯一约束的行为:
ERROR at line 1:
ORA-00001: unique constraint (OPS$FNAVA.XPKTEMPTIME) violated
你能发现我做错了什么吗? (欢迎任何帮助)
【问题讨论】:
-
您看到的错误是什么?什么不起作用?另外,我在这里没有看到任何 PL/SQL,但就这样吧。
-
在每个
SELECTS的末尾尝试GROUP BY TO_CHAR(trainFareDate, 'MM/DD/YYYY HH:MM:SS Q'), TO_NUMBER(TO_CHAR(trainFareDate, 'HH12')), TO_NUMBER(TO_CHAR(trainFareDate, 'MI')), TO_NUMBER(TO_CHAR(trainFareDate, 'SS')), TO_NUMBER(TO_CHAR(trainFareDate, 'MM')), TO_NUMBER(TO_CHAR(trainFareDate, 'DD')), TO_NUMBER(TO_CHAR(trainFareDate, 'YYYY')), TO_NUMBER(TO_CHAR(trainFareDate, 'Q')) -
是的,我很晚才注意到我没有复制错误。所以我对其进行了编辑并附加了它。请按 F5 :)
-
我会试试 Lamak,等一下 :)
-
尝试将 HH 和 HH12 替换为 HH24。也许您有两个相隔 12 小时的日期导致了问题。
标签: sql oracle join union ora-00001