Oracle:MERGE INTO 不可见的列
Oracle: MERGE INTO with invisible columns
我遇到了 ORA-00904 问题:标识符无效。
例如:
我有一个这样创建的 table:
CREATE TABLE TEST_TABLE
(
COL_1 VARCHAR2(5 CHAR) NOT NULL,
COL_2 VARCHAR2(30 CHAR),
COL_3 RAW(16) INVISIBLE DEFAULT SYS_GUID ()
)
CREATE UNIQUE INDEX TEST_TABLE_PK ON TEST_TABLE
(COL_1);
远程数据库(DBLINK:testdb)上的第二个 table 如下所示:
CREATE TABLE TEST_TABLE
(
COL_1 VARCHAR2(5 CHAR) NOT NULL,
COL_2 VARCHAR2(30 CHAR)
)
CREATE UNIQUE INDEX TEST_TABLE_PK ON TEST_TABLE
(COL_1);
在下一步中,我想使用 merge into 语句合并本地和远程数据库之间的数据,如下所示:
MERGE INTO TEST_TABLE@testdb target
USING (SELECT * FROM TEST_TABLE
WHERE COL_3 = '3F47613050860B4EE0539D0A10AC10B7') source
ON (target.COL_1 = source.COL_1)
WHEN MATCHED
THEN
UPDATE SET target.COL_2 = source.COL_2
WHEN NOT MATCHED
THEN
INSERT (COL_1, COL_2)
VALUES (source.COL_1, source.COL_2);
由于 ORA-00904:"A5".COL_3 标识符无效,合并到语句不起作用。但是,如果 COL_3 列可见,则相同的 merge into 语句工作正常。
"A5" 从哪里来?
这里有什么问题?有没有人有同样的问题?
Oracle 版本:本地数据库是 12cSE,远程数据库是 11g。
通过名称 COL_1 和 COL_2 指定您的 来源 table select。
关键是去掉SELECT * from
MERGE INTO TEST_TABLE@testdb target
USING (SELECT COL_1,COL_2 FROM TEST_TABLE
WHERE COL_3 = '3F47613050860B4EE0539D0A10AC10B7') source
ON (target.COL_1 = source.COL_1)
WHEN MATCHED
THEN
UPDATE SET target.COL_2 = source.COL_2
WHEN NOT MATCHED
THEN
INSERT (COL_1, COL_2)
VALUES (source.COL_1, source.COL_2);
我遇到了 ORA-00904 问题:标识符无效。
例如: 我有一个这样创建的 table:
CREATE TABLE TEST_TABLE
(
COL_1 VARCHAR2(5 CHAR) NOT NULL,
COL_2 VARCHAR2(30 CHAR),
COL_3 RAW(16) INVISIBLE DEFAULT SYS_GUID ()
)
CREATE UNIQUE INDEX TEST_TABLE_PK ON TEST_TABLE
(COL_1);
远程数据库(DBLINK:testdb)上的第二个 table 如下所示:
CREATE TABLE TEST_TABLE
(
COL_1 VARCHAR2(5 CHAR) NOT NULL,
COL_2 VARCHAR2(30 CHAR)
)
CREATE UNIQUE INDEX TEST_TABLE_PK ON TEST_TABLE
(COL_1);
在下一步中,我想使用 merge into 语句合并本地和远程数据库之间的数据,如下所示:
MERGE INTO TEST_TABLE@testdb target
USING (SELECT * FROM TEST_TABLE
WHERE COL_3 = '3F47613050860B4EE0539D0A10AC10B7') source
ON (target.COL_1 = source.COL_1)
WHEN MATCHED
THEN
UPDATE SET target.COL_2 = source.COL_2
WHEN NOT MATCHED
THEN
INSERT (COL_1, COL_2)
VALUES (source.COL_1, source.COL_2);
由于 ORA-00904:"A5".COL_3 标识符无效,合并到语句不起作用。但是,如果 COL_3 列可见,则相同的 merge into 语句工作正常。 "A5" 从哪里来? 这里有什么问题?有没有人有同样的问题?
Oracle 版本:本地数据库是 12cSE,远程数据库是 11g。
通过名称 COL_1 和 COL_2 指定您的 来源 table select。
关键是去掉SELECT * from
MERGE INTO TEST_TABLE@testdb target
USING (SELECT COL_1,COL_2 FROM TEST_TABLE
WHERE COL_3 = '3F47613050860B4EE0539D0A10AC10B7') source
ON (target.COL_1 = source.COL_1)
WHEN MATCHED
THEN
UPDATE SET target.COL_2 = source.COL_2
WHEN NOT MATCHED
THEN
INSERT (COL_1, COL_2)
VALUES (source.COL_1, source.COL_2);