Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/wcf/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql ORA-00932:不一致的数据类型:预期时间戳已获取时间戳_Sql_Oracle_Casting_Oracle11g - Fatal编程技术网

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,则不需要构造函数,因此有点奇怪,为什么在铸造值时需要它。