スクリプト内にデータベース リンクを作成し、リンクされたデータベースからすべてのテーブル名を取得したいと考えています。私が正しければ、使用するにはデータベース リンクを作成する必要がありますが、Oracle では、my_fnセクションまたはDECLAREセクション内にそのようなものを作成することは許可されていません。なにか提案を?
DECLARE
TYPE tp_col_array IS TABLE OF varchar2(1000);
FUNCTION my_fn(
p_in_dblink_name IN VARCHAR2,
p_in_schema_name IN VARCHAR2)
RETURN varchar2 AS
vr_coll_table tp_col_array;
vr_coll_owner tp_col_array;
BEGIN
create database link "database1"
connect to my_name
identified by "my_password"
using 'database1';
SELECT owner, table_name
bulk collect into vr_coll_owner, vr_coll_table
FROM all_tables@database1
WHERE OWNER NOT IN ('SYS');
RETURN TO_CHAR(vr_coll_owner(1)); //just for temporary
END my_fn;
BEGIN
DBMS_OUTPUT.PUT_LINE(my_fn('link1','schema1'));
END;
編集 次のことも試しましたが、運がありません:(
Execute immediate q'[create database link "database1"
connect to my_name
identified by "my_password"
using 'database1']';