标签: database-link

使用数据库链接调用oracle函数

我创建了一个getEmployee(id in varchar)在我的远程数据库中调用的oracle函数,我试图使用数据库链接从我的本地数据库调用它.

getEmployee,我正在尝试返回带有员工数据的游标.(表:员工(ID,名称,地址)):

SELECT schema.getEmployee@dblink(id) 
  FROM DUAL;
Run Code Online (Sandbox Code Playgroud)

如何使用列名(ID,名称,地址)获取结果集?

根据Contrad,我改变了我的本地功能;

FUNCTION LocalGetEmployee(ID in varchar2)
RETURN Schema.SomeRefCursor
AS  

OUTPUT Schema.SomeRefCursor;

BEGIN 

  OUTPUT := schema.getEmployee@dblink(ID);

  RETURN OUTPUT;
END;  
Run Code Online (Sandbox Code Playgroud)

但是,当我从Java代码调用此函数时,会引发以下错误:

"ORA-24338:语句句柄未执行"

sql oracle database-link ora-24338

4
推荐指数
1
解决办法
3万
查看次数

无法在Oracle-DB中创建到远程数据库的数据库链接

我们公司有一个CRM系统,它使用Oracle 11g数据库.它由第三方供应商开发.

我们无权访问运行CRM系统的服务器.但是,我们有可用的DBA登录数据(SYS用户).它包括:

  • 服务器IP:172.1.2.3
  • 港口:1521
  • SID:abc
  • user:sys
  • 密码:*

我们可以使用它来使用Oracle SQL Developer 3.1(连接>>属性)访问数据库

现在,部分数据必须从CRM数据库复制另一个 Oracle数据库中,该数据库驻留在另一台服务器上.

据我了解,我需要在目标数据库中创建一个数据库链接.我试过这样的事情:

CREATE PUBLIC DATABASE LINK xxx CONNECT TO sys IDENTIFIED BY ***** USING 'MYTNSENTRY'
Run Code Online (Sandbox Code Playgroud)

我的tnsnames.ora如下:

MYTNSENTRY =
 (DESCRIPTION = 
   (ADDRESS_LIST =
     (ADDRESS = (PROTOCOL = TCP)(HOST = 172.1.2.3)(PORT = 1521))
   )
 (CONNECT_DATA =
   (SERVICE_NAME = abc)
 )
)
Run Code Online (Sandbox Code Playgroud)

....而我的listener.ora看起来像这样:

MYLISTENER=
  (DESCRIPTION=
    (ADDRESS_LIST=
      (ADDRESS=(PROTOCOL=tcp)(HOST=172.1.2.3)(PORT=1521))
      ))
SID_LIST_MYLISTENER=
  (SID_LIST=    
    (SID_DESC=
      (SID_NAME=MYTNSENTRY)
      (ORACLE_HOME=C:\somepath) # path to Oracle home …
Run Code Online (Sandbox Code Playgroud)

oracle database-connection database-link heterogeneous-services

3
推荐指数
1
解决办法
3万
查看次数

如何关闭在数据库链接(ORA-02080)中创建的游标?

我在Oracle SQL Developer中执行以下步骤(逐步使用F-9):

create database link mydb connect to my_schema identified by mypwd using 'connection1';

select * from users where id = 1;

rollback;
ALTER SESSION CLOSE DATABASE LINK mydb;
drop database link mydb;
Run Code Online (Sandbox Code Playgroud)

我尝试关闭数据库链接时收到错误:

SQL错误:ORA-02080:数据库链接正在使用02080. 00000 - "数据库链接正在使用中"

*原因:事务处于活动状态或者在alter session close database link命令中给出的数据库链接上打开了游标.

*动作:提交或回滚,并关闭所有游标

交易完成了,但是当我这样做时,select * from V$DBLINK;我看到还有一个打开的光标,但我不知道如何关闭那个.

sql oracle database-connection database-link database-cursor

2
推荐指数
1
解决办法
7927
查看次数

如何在oracle中使用dblink调用函数?

是否可以在 oracle 中使用 DBLINK 调用函数?我正在调用这样的函数并收到错误 - ORA-00904: "MC"."GET_REFTYPES": invalid identifier

select column_value from table(mc.Get_REFTYPES@READ_MAIN_MCNAV(param1, param2, param3)));
Run Code Online (Sandbox Code Playgroud)

功能码

CREATE OR REPLACE FUNCTION "MC"."Get_REFTYPES"(
  param1 IN VARCHAR, 
  param2  IN NUMBER, 
  param3  IN DATE DEFAULT SYSDATE
  )
  RETURN RefType_T PIPELINED IS

  CURSOR cur_st (
    cur_param1 VARCHAR, 
    cur_param2  NUMBER,
    cur_param3  DATE
    ) IS
            select 
              TypeID
            FROM ......
          WHERE......... ;

  t_st Types_T;  -- Table variable to store return values       

 BEGIN

    OPEN cur_st(param1, param2 , param3 );
    FETCH cur_st BULK COLLECT INTO t_st;
    CLOSE cur_st;

    FOR …
Run Code Online (Sandbox Code Playgroud)

database-link oracle11g

2
推荐指数
1
解决办法
2万
查看次数

如何通过Oracle廉价验证另一个模式中表中列的存在?

环境是Oracle 9和10.我没有DBA级别的访问权限.

问题是在另一个模式中验证特定表中是否存在特定列.

有两种情况需要处理.

  1. 同一实例中的另一个模式
  2. 使用db_link在不同实例中的模式

鉴于我的模式FRED和另一个模式BARNEY,我试过这样的事情

SELECT 1
FROM BARNEY.USER_TAB_COLS
WHERE TABLE_NAME = 'SOME_TABLE' 
  AND COLUMN_NAME = 'SOME_SPECIFIC_COLUMN'
Run Code Online (Sandbox Code Playgroud)

产生了[1] :(错误):ORA-00942:表或视图不存在

在这一段时间过后,我意识到USER_TAB_COLS,实际上不是一个表.这是一种观点.我一直在从表中选择,但不是从视图中选择.

我用db_link尝试了同样的事情,并惊讶地看到数据回来了.db_link中有一个嵌入式schema_name /密码,所以我觉得它有用,因为它有效地登录到另一个模式,这应该使视图可以访问.

谷歌搜索了我的眼球,并在Oracle医生的山上磨了我的眼球,我正在寻找有人指出我正确的方向,或者至少指出我错过了什么.

有哪些技术可用于从同一实例中的模式获取与用户表相关的元数据,以验证特定列是否存在?

提前致谢.

邪恶.

+1为好的答案.谢谢.

sql oracle database-link ora-00942

1
推荐指数
1
解决办法
897
查看次数

oracle中的数据库基本链接是否应在完成使用后删除/关闭?

我有一个SQL脚本使用"创建数据库链接"连接到另一个数据库,并复制一些数据.

在使用完毕后,是否应删除或关闭此数据库基本链接?(说,假设我可能不会再需要它).

什么是最佳做法?

我听到我的团队有一些相互矛盾的答案.

如果我要关闭它,我如何确保在我打电话时关闭链接:

drop database link somelink;
Run Code Online (Sandbox Code Playgroud)

(我得到错误抱怨我打开了连接,这很奇怪,因为我没有执行任何异步操作/作业).

sql oracle plsql database-link

1
推荐指数
1
解决办法
755
查看次数

为什么数据库链接不利于安全?

我听说数据库链接不适合组织使用。为什么不利于安全?

sql database security oracle database-link

1
推荐指数
1
解决办法
6171
查看次数