Sql ORA-00932:不一致的数据类型:预期时间戳已获取时间戳
运行以下命令:Sql ORA-00932:不一致的数据类型:预期时间戳已获取时间戳,sql,oracle,casting,oracle11g,Sql,Oracle,Casting,Oracle11g,运行以下命令: CREATE OR REPLACE TYPE MT_TIMESTAMP_ERROR_TYPE IS OBJECT ( ID VARCHAR(10), TIMEST TIMESTAMP ) ; CREATE TABLE MT_TIMESTAMP_ERROR_TABLE ( ecid VARCHAR(10), startdate DATE ) ; CREATE OR REPLACE VIEW MT_TIMEST
CREATE OR REPLACE TYPE MT_TIMESTAMP_ERROR_TYPE
IS OBJECT
(
ID VARCHAR(10),
TIMEST TIMESTAMP
)
;
CREATE TABLE MT_TIMESTAMP_ERROR_TABLE
(
ecid VARCHAR(10),
startdate DATE
)
;
CREATE OR REPLACE VIEW MT_TIMESTAMP_ERROR_VIEW
OF MT_TIMESTAMP_ERROR_TYPE
WITH OBJECT IDENTIFIER(ID)
AS
(
select
ecid AS ID,
CAST(startdate as TIMESTAMP) AS TIMEST
from MT_TIMESTAMP_ERROR_TABLE
);
我得到:
Error at Command Line : 23 Column : 5
Error report -
SQL Error: ORA-00932: inconsistent datatypes: expected TIMESTAMP got TIMESTAMP
00932. 00000 - "inconsistent datatypes: expected %s got %s"
*Cause:
*Action:
Oracle版本:
Oracle数据库11g企业版11.2.0.3.0版-64位生产
有什么问题吗
谢谢
注意,András视图需要一个对象构造函数。表中的每行不包含两列。它包含一个具有两个值的对象。因此:
CREATE OR REPLACE VIEW MT_TIMESTAMP_ERROR_VIEW
OF MT_TIMESTAMP_ERROR_TYPE
WITH OBJECT IDENTIFIER(ID)
AS
(
select MT_TIMESTAMP_ERROR_TYPE(ecid, CAST(startdate as TIMESTAMP))
from MT_TIMESTAMP_ERROR_TABLE
);
这是一个SQL小提琴
或者,如果要从对象中提取两个字段,则不要声明视图以返回对象:
CREATE OR REPLACE VIEW MT_TIMESTAMP_ERROR_VIEW
AS
(
select t.ecid, t.startdate
from MT_TIMESTAMP_ERROR_TABLE t
);
另外,我不知道为什么甲骨文会给出如此令人困惑的错误信息。它实际上应该更像“不一致的数据类型:预期的MT\u时间戳\u错误\u类型得到时间戳”。据推测,错误处理系统在不同级别的类型上会变得混乱。谢谢,构造器提供了帮助!但是,如果我在MT_TIMESTAMP_ERROR_表中将startdate的类型更改为TIMESTAMP,则不需要构造函数,因此有点奇怪,为什么在铸造值时需要它。