在SQL中创建下表时遇到问题:
CREATE TABLE observacion (
carretera VARCHAR2(6),
sentido VARCHAR2(3),
km NUMBER(3,0),
fecha DATE,
hora TIME,
matricula VARCHAR2(7) NOT NULL,
vin VARCHAR2(17) NOT NULL,
velocidad NUMBER(3,0) NOT NULL,
CONSTRAINT PK_observacion PRIMARY KEY (carretera, sentido, km, fecha, hora),
CONSTRAINT FK_radar FOREIGN KEY (carretera, sentido, km) REFERENCES radar (carretera, sentido, km),
CONSTRAINT FK_vehiculo FOREIGN KEY (matricula, vin) REFERENCES vehiculo (matricula, vin) ON DELETE CASCADE);
我得到的错误是:
ORA-00902: invalid datatype
00902. 00000 - "invalid datatype"
*Cause:
*Action:
我需要fecha和hora有DATE和TIME数据类型,但我认为这就是问题所在。有人可以帮帮我吗?谢谢:))
修改的
这是我需要从一个数据库导入到另一个数据库的传入数据:
INSERT INTO megatable VALUES ('6205AIA', 'OQI29527Q44741473', 'Seta', 'Champi', '2200', 'verde', '2005-11-02', '2010-06-26', 'Leila', 'Conza', 'Sanchez', 'Calle de los Tulipanes, N 126, 27306', 'Hayedo de las Caballerizas', NULL, NULL, '1980-04-24', '51464893R', 'Gabriel Enrique', 'Orejuela', 'Herbada', 'Calle Orfebres, N 51, 23734', 'Sotolemures de los Buhos', '555298803', 'G.E.O.H.@servcorreo.uctreseme.edu', '1962-11-09', '69049869M', 'C', '1998-04-07', 49, 'A1', 120, 242, 'ASC', 100, **'2010-04-11', '22:45:38.75'**, 94);
所有这些数据都是VARCHAR2(50)类型
正如你所看到的,这里只有一种关系,而我想要做的就是将所有这些属性分离到不同的关系中,所以一切看起来都更好。这仍然是我想要分别存储日期和时间的内容,但我不认为保持VARCHAR数据类型是最佳选择。
答案 0 :(得分:3)
OP在EDIT中显示原始问题输入数据的样子。所有值都是字符串;日期和时间组件,显示为输入的第三个和第二个值,来自'2010-04-11'
和'22:45:38.75'
。
由于时间有小数秒,因此Oracle中最佳数据类型为TIMESTAMP
。要从这两个字符串中获取单个时间戳:
TO_TIMESTAMP(str1 || ' ' || str2, 'yyyy-mm-dd hh24:mi:ss.ff')
其中str1
和str2
是任意名称,我只是为进入的两个字符串做了补充;应修改代码以引用这些字符串,无论以何种方式导入数据。
要创建DATE
数据类型,一个选项是从时间组件中选择子字符串。我更喜欢另一种选择:首先创建时间戳,如上所示;然后将它全部包装在cast ( ...... as date)
。
CAST (TO_TIMESTAMP(str1 || ' ' || str2, 'yyyy-mm-dd hh24:mi:ss.ff') AS DATE)
答案 1 :(得分:1)
您可以尝试以下声明。
CREATE TABLE observacion (
carretera VARCHAR2(6),
sentido VARCHAR2(3),
km NUMBER(3,0),
fecha DATE,
hora interval day (0) to second(0),
matricula VARCHAR2(7) NOT NULL,
vin VARCHAR2(17) NOT NULL,
velocidad NUMBER(3,0) NOT NULL,
CONSTRAINT PK_observacion PRIMARY KEY (carretera, sentido, km, fecha, hora),
CONSTRAINT FK_radar FOREIGN KEY (carretera, sentido, km) REFERENCES radar
(carretera, sentido, km),
CONSTRAINT FK_vehiculo FOREIGN KEY (matricula, vin) REFERENCES vehiculo
(matricula, vin) ON DELETE CASCADE);
您只能插入时间的方式是:
insert into observacion (...) values (TO_DSINTERVAL('0 15:00:14'));
希望我能帮助你。
塔拉特