如何获取游标中变量中的列值。我正在尝试从创建了 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 的指导吗
嗯,只有当你说出你遇到的错误时......
我猜这是关于错误声明的局部变量(因为它必须通过该数据库链接从表中继承数据类型)。请参阅以下演示:
数据库链接:
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>
这假设数据库链接在该代码的编译时存在。 如果是动态生成的数据库链接,您会收到错误,因为该链接不可评估。