是否可以通过数据库链接在远程数据库上执行动态 PL/SQL?
我正在寻找类似的东西:
l_stmt := 'begin null; end;';
execute immediate l_stmt@dblink;
上面的语法显然是错误的,我明白了PLS-00201:必须声明标识符“L_STMT@DBLINK”.
可以远程创建过程然后执行它。有没有一种方法可以在不创建远程过程的情况下执行代码?
编辑:
我正在尝试解决通过数据库链接传递类型的问题。远程过程需要 t_id_tab 类型的参数,该参数在远程 DB 上定义为
CREATE OR REPLACE TYPE T_ID_TAB AS TABLE OF NUMBER(12)
您可以通过调用远程数据库上的 DBMS_SQL 包来执行任意代码。
Sample:
set serveroutput on
create or replace synonym remote_dbms_sql for dbms_sql@core;
declare
c number;
l_global_name varchar2(200);
begin
c := remote_dbms_sql.open_cursor();
remote_dbms_sql.parse( c, 'select global_name from global_name', dbms_sql.native );
remote_dbms_sql.define_column( c, 1, l_global_name, 200 );
dbms_output.put_line( remote_dbms_sql.execute_and_fetch( c ) );
remote_dbms_sql.column_value( c, 1, l_global_name );
dbms_output.put_line( l_global_name );
remote_dbms_sql.close_cursor( c );
end;
/
请注意,对 DBMS_SQL.NATIVE 的引用是本地的,而不是远程的。您无法引用远程包常量,但该常量的实际值可能在两个数据库中是相同的。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)