Я хотел бы создать ссылку на базу данных внутри скрипта и хочу получить все имена таблиц из связанной базы данных. Если я прав, мне нужно создать ссылку на базу данных для использования, но Oracle не позволяет мне создавать такую вещь ни внутри my_fn, ни DECLARE. Любое предложение?PLSQL - создать внутреннюю функцию DBLink
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 [email protected]
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;
EDIT Я также попытался следующие, но не повезло :(
Execute immediate q'[create database link "database1"
connect to my_name
identified by "my_password"
using 'database1']';
Определить «не повезло». Вы получаете сообщение об ошибке? Если да, то какая ошибка? Если вы создаете динамическую базу данных в блоке PL/SQL, каждая ссылка на эту ссылку базы данных также должна использовать динамический SQL, иначе ваш блок не будет компилироваться. Ваш оператор 'SELECT' должен использовать' EXECUTE IMMEDIATE'. Отступив назад, создание ссылок на базы данных во время выполнения, как правило, является плохой практикой - я бы серьезно задался вопросом, почему вы идете по этому пути. –
@JustinCave Использование динамического SQL для оператора select отлично работает! Спасибо! Почему вы не опубликовали это как ответ, так что я могу отметить его как правильный ответ. – Adrian