2009-07-13 6 views
2

データベース・リンクを介してリモート・データベース上で動的PL/SQLを実行することは可能ですか?すぐにデータベース・リンクを実行する

私のようなものを探しています:識別子 'L_STMT @ DBLINK'を宣言する必要があります。

l_stmt := 'begin null; end;'; 
execute immediate [email protected]; 

上記の構文は明らかに間違っているが、私はPLS-00201を取得します。

リモート・プロシージャを作成し、それを実行することができます。リモートプロシージャを作成せずにコードを実行する方法はありますか?

EDIT: 私はDBリンク上でタイプを渡して回避しようとしています。リモートプロシージャは、私はあなただけの手順でオブジェクト名を修飾ではなく、プロシージャ自体を修飾するだろうと思うだろう

CREATE OR REPLACE TYPE T_ID_TAB AS TABLE OF NUMBER(12) 
+0

あなたは何を達成しようとしていますか? – FerranB

答えて

4

を試していませんでした、とすることができます。

サンプル:DBMS_SQL.NATIVEへの参照は、リモート、ローカルでないこと

set serveroutput on 

create or replace synonym remote_dbms_sql for [email protected]; 

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; 
/

注意。リモートパッケージ定数は参照できませんが、おそらくこの定数の実際の値は両方のデータベースで同じです。

0

としてリモートDB上で定義された型t_id_tabのパラメータが必要です。

+0

それは私が思ったものです。残念ながら、私はhttp://stackoverflow.com/questions/378299/referencing-oracle-user-defined-types-over-dblink – gabor

-1

は、あなたの代わりにタイプのパッケージの配列を作成しようとしたことがありますか?私は意味:この方法は、作品と

CREATE OR REPLACE PACKAGE the_package AS 
    TYPE T_ID_TAB AS TABLE OF NUMBER(12); 
END the_package; 

は、私はあなたがそこDBMS_SQLパッケージを呼び出すことによって、リモート・データベース上で任意のコードを実行することができます...

+0

で説明したように、両方のDBをハッキングすることなく動作するようには思えないのstmt、リモートタイプを使用する必要があります残念ながら、リモートDBのプロシージャは、T_ID_TAB @ DBLINKをパラメータとして取る必要があります。これはPL/SQL配列ではなくSQL型です。 – gabor

関連する問題