我想从涉及空间表(基于 SDE)和 oracle 非空间表的查询中创建一个物化视图。只执行查询,工作,但只要我想创建一个物化视图(或表),就会出现错误“ORA-01722:无效号码”。
我尝试了不同的转换方法,如 to_number()、cast(x as numeric(x,x))、cast(as number(x,x))、cast(x as int),在的两侧,>=
也只有在左侧。原因是左侧 ( TEST_IND_TABLE_BASIS.IND_VALUE
) 的>=
类型为 varchar2。这是由数据模型给出的。
下面的简化示例有效。我的假设是 SDE 引起了麻烦?你能在我的代码中发现另一个可能的问题吗?
这是我的问题的简化(工作)版本。在原始代码中,表TEST_IND_TABLE_BASIS是一个空间 (SDE) 表。
CREATE TABLE
TEST_IND_THRSHLD
(
CD VARCHAR(64) NOT NULL,
THRSHLD INTEGER
--CONSTRAINT IND_THRSHLD_PK PRIMARY KEY (INDICATOR)
);
INSERT INTO TEST_IND_THRSHLD (CD, THRSHLD) VALUES ('INDICATOR_1', 2);
INSERT INTO TEST_IND_THRSHLD (CD, THRSHLD) VALUES ('INDICATOR_2', 50)
CREATE TABLE
TEST_IND_TABLE_BASIS
(
ID INTEGER NOT NULL,
IND_VALUE VARCHAR(32)--,
--CONSTRAINT IND_THRSHLD_PK PRIMARY KEY (INDICATOR)
);
INSERT INTO TEST_IND_TABLE_BASIS (ID, IND_VALUE) VALUES (1,'1.362');
INSERT INTO TEST_IND_TABLE_BASIS (ID, IND_VALUE) VALUES (2,'2.362');
CREATE MATERIALIZED VIEW MV_TEST AS
SELECT TEST_IND_TABLE_BASIS.ID
,CASE WHEN
cast(TEST_IND_TABLE_BASIS.IND_VALUE as numeric) >= (SELECT THRSHLD FROM TEST_IND_THRSHLD WHERE CD = 'INDICATOR_1')
THEN 0
ELSE 1
END AS FLAG
FROM TEST_IND_TABLE_BASIS