我有一个视图,并希望插入这个通过DB链接。但这是错误的"ORA-02070:数据库不支持在这种情况下“。如何解决这个错误?
CREATE OR REPLACE FORCE VIEW V_TEST
(
OBJECT_ID,
SEQUENCE,
SCHEMA_NAME,
OBJECT_NAME,
OBJECT_TYPE_NAME,
LINE,
POSITION,
ERROR_MESSAGE,
CREATE_DATE
)
AS
SELECT dbaObjects.OBJECT_ID,
dbaErrors.SEQUENCE,
dbaErrors.OWNER AS SCHEMA_NAME,
dbaErrors.NAME AS OBJECT_NAME,
dbaErrors.TYPE AS OBJECT_TYPE_NAME,
dbaErrors.LINE,
dbaErrors.POSITION,
dbaErrors.TEXT AS ERROR_MESSAGE,
SYSDATE AS CREATE_DATE
FROM SYS.DBA_OBJECTS dbaObjects, SYS.DBA_ERRORS dbaErrors
WHERE dbaObjects.OWNER = dbaErrors.OWNER
AND dbaObjects.OBJECT_NAME = dbaErrors.NAME
AND dbaObjects.OBJECT_TYPE = dbaErrors.TYPE
AND dbaObjects.OWNER != 'SYS'
AND dbaObjects.OWNER = 'HELLO'
AND dbaObjects.STATUS = 'INVALID'
AND dbaErrors.TEXT != 'PL/SQL: SQL Statement ignored'
AND dbaErrors.TEXT != 'PL/SQL: Statement ignored'
ORDER BY dbaErrors.OWNER,
dbaErrors.NAME,
dbaErrors.TYPE,
dbaErrors.SEQUENCE;
视图和远程表类型是相同的
插入声明:
INSERT INTO HELLO.T_INVALID_OBJECT_2@VADA (OBJECT_ID,
SEQUENCE,
SCHEMA_NAME,
OBJECT_TYPE_NAME,
OBJECT_NAME,
LINE,
POSITION,
ERROR_MESSAGE,
CREATE_DATE)
SELECT V.OBJECT_ID,
V.SEQUENCE,
V.SCHEMA_NAME,
V.OBJECT_TYPE_NAME,
V.OBJECT_NAME,
V.LINE,
V.POSITION,
V.ERROR_MESSAGE,
V.CREATE_DATE
FROM V_TEST V;
这是给予错误插入语句:(
发布于 2015-12-24 10:14:25
这个问题与视图中使用的视图有关(DBA_SOURCES
和DBA_ERRORS
)。请参阅关于V$SESSION
、here和here的相同变体的讨论。
不幸的是,我没有看到与V$SESSION相同的简单解决方案(如上面的链接中所建议的),在我看来,问题是由sys_context
在(嵌套视图的)视图DBA_OBJECTS
中的调用引起的。因此,propper解决方案要么是编写您自己版本的DBA_OBJECTS
,而不使用sys_context
/ USERENV
,要么在创建该数据的本地副本(例如,GTT中)。
无论如何,有两个解决办法:
1)还原插入,即通过DB链接从视图连接到远程DB ans。
insert into t_demo
select * from v_demo@demo;
如果连接到远程DB不是一个选项,您可以
2)或者在远程DB上定义一个过程,并从本地DB调用它
-- ON REMOTE DB
create procedure ins_remote
AS
BEGIN
insert into t_demo
select * from v_demo@demo;
END;
/
-- plus grants for execute
-- ON LOCAL DB
begin
ins_remote@demo;
end;
/
https://stackoverflow.com/questions/34448918
复制相似问题