使用数据库链接从远程数据库获取游标中的值

问题描述 投票:0回答:2

如何获取游标中变量中的列值。我正在尝试从创建了 dblink 的数据库中复制数据。我正在使用以下查询来获取数据

DECLARE
    v_remark_column mytablename.remark_column%TYPE;
    CURSOR c_cursor1 IS
    SELECT
        remark_column
    FROM
        mytablename@dblinkname ;

BEGIN
    OPEN c_cursor1;
    LOOP
        FETCH c_cursor1 INTO v_remark_column;
        EXIT WHEN c_cursor1%notfound;
        dbms_output.put_line('v_remark_column: ' || v_remark_column);
    END LOOP;

    CLOSE c_cursor1;
END;

这给了我错误并且无法获取列值。我可以获得一些有关 dblink 的指导吗

oracle plsql dblink
2个回答
0
投票

嗯,只有当你说出你遇到的错误时......


我猜这是关于错误声明的局部变量(因为它必须通过该数据库链接从表中继承数据类型)。请参阅以下演示:

数据库链接:

SQL> create database link dbl_mike
  2    connect to mike
  3    identified by lion
  4    using 'orcl';

Database link created.

SQL> select * from dual@dbl_mike;

D
-
X

PL/SQL 过程:

SQL> set serveroutput on
SQL> declare
  2    v_dummy dual.dummy@dbl_mike%type;         --> see this
  3    cursor c_cursor1 is
  4      select dummy from dual@dbl_mike;
  5  begin
  6    open c_cursor1;
  7    loop
  8      fetch c_cursor1 into v_dummy;
  9      exit when c_cursor1%notfound;
 10      dbms_output.put_line('dummy = ' || v_dummy);
 11    end loop;
 12    close c_cursor1;
 13  end;
 14  /
dummy = X

PL/SQL procedure successfully completed.

SQL>

因此,您应该将其声明为

v_remark_column mytablename.remark_column@dblinkname%type;

此外,考虑切换到光标

FOR
循环,它更简单:

SQL> begin
  2    for c_cursor1 in (select dummy from dual@dbl_mike) loop
  3      dbms_output.put_line('dummy = ' || c_cursor1.dummy);
  4    end loop;
  5  end;
  6  /
dummy = X

PL/SQL procedure successfully completed.

SQL>

0
投票

这假设数据库链接在该代码的编译时存在。 如果是动态生成的数据库链接,您会收到错误,因为该链接不可评估。

© www.soinside.com 2019 - 2024. All rights reserved.