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

zf9nrax1  于 2023-05-16  发布在  Oracle
关注(0)|答案(1)|浏览(135)

如何在游标中获取变量中的列值。我试图从创建了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的指导吗

chhkpiq4

chhkpiq41#

嗯,除非你说你犯了什么错误……
我猜这是关于错误声明的局部变量(因为它必须通过数据库链接从表中 * 继承 * 数据类型)。请参见以下演示:
数据库链接:

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>

相关问题