Форум программистов, компьютерный форум, киберфорум
Oracle
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.93/15: Рейтинг темы: голосов - 15, средняя оценка - 4.93
9 / 9 / 2
Регистрация: 25.11.2012
Сообщений: 115
1

Динамическое создание DATABASE LINK в процедуре

20.06.2017, 23:29. Показов 2781. Ответов 1

Author24 — интернет-сервис помощи студентам
Добрый вечер.

Преамбула:
Кликните здесь для просмотра всего текста

Есть одна база данных. Есть большое количество пользователей, каждому сопоставлен пользователь (роль) в базе. Доступа к таблицам нет, выборку можно сделать только из представлений, а контексты таким образом, что в представление выбираются только те данные, к которым есть доступ у пользователя.

И есть вторая база. На ней есть пользователь с админскими правами.


Суть:
Кликните здесь для просмотра всего текста

Появилась необходимость автоматизировать выборку из первой БД, причем в запросе должны участвовать еще некоторые таблицы второй. Логичным решением было создать процедуру (во второй базе, так как в первой на создание объектов нет прав), в которой будет происходить работа с таблицами, причем к первой базе будет создаваться соединение по DATABASE LINK.
Так как пользователей много, а их контексты разнятся, то правильнее будет создать каждому пользователю свой дблинк с его логином и паролем. Но если учесть, что несколько таких процедур может быть запущенно одновременно, а также неизвестно, сколько, когда и какие пользователи будут вызывать данную процедуру; появилась идея создавать DATABASE LINK прямо в теле процедуры, а в конце его дропать.


Проблема:
Кликните здесь для просмотра всего текста

Так как CREATE DATABASE LINK - DDL команда, то в процедуре ее необходимо выполнять через EXECUTE IMMEDIATE. Название дблинка также генерируется автоматически и хранится в varchar2 переменной.
Как только я не пытался описать создание дблинка и его использование, все время получаю различные ошибки. Например, "неверное окончание SQL-предложения" в вызове EXECUTE IMMEDIATE create_text; где значение переменной create_text - текст создания дблинка. Если вывести текст создания через DBMS_OUTPUT, а после вручную запустить его, линк создается.

В интернете наткнулся только на возможность подстановки линка из переменной в запрос на выборку данных. А вот как создать это соединение динамически, не нашел.


Подскажите, пожалуйста, как можно решить данную проблему.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
20.06.2017, 23:29
Ответы с готовыми решениями:

Database Link
есть два сервера Oracle что нужно чтобы настроить Database Link между ними. надо создавать...

link database in MS Access
Hi all 1. Kak mozhno programmno otkrit i ispolzovat (kak tekushi) drugoj(ne to v kotorom...

Database link: password are changed
Привет! Работаю в pl sql developer 10. Создаю линк к базе, все прописываю верно, но как только...

SQLite DataBase - почему подчеркивает DataBase db: пишет (DataBase cannot be resolved to a type)
Здравствуйте! помогите понять почему подчеркивает DataBase db; пишет (DataBase cannot be...

1
6 / 6 / 1
Регистрация: 28.07.2014
Сообщений: 49
04.07.2017, 16:28 2
Цитата Сообщение от fadeinmad Посмотреть сообщение
Как только я не пытался описать создание дблинка и его использование, все время получаю различные ошибки.
Попробуйте так :

SQL> create user test identified by test;

User created.

SQL> grant connect to test;

Grant succeeded.

SQL> grant create database link to test;

Grant succeeded.

SQL> connect test/test
Connected.


Oracle 11 SQL
1
2
3
4
5
6
7
8
SET serveroutput ON
DECLARE
testlink VARCHAR2(400) ;
BEGIN 
testlink := q'[create database link TESTDBLINK connect to TEST identified by TEST using 'INFORT01']';
EXECUTE IMMEDIATE testlink;
END;
/
PL/SQL procedure successfully completed.

SQL> connect / as sysdba
Connected.


Oracle 11 SQL
1
2
3
4
5
6
col OWNER FOR a15
col DB_LINK FOR a20
col HOST FOR a20
col USERNAME FOR a20
SET lines 300
SELECT * FROM dba_db_links WHERE owner='TEST';
Код
OWNER           DB_LINK              USERNAME             HOST                 CREATED
--------------- -------------------- -------------------- -------------------- ------------------
TEST            TESTDBLINK           TEST                 INFORT01             04-JUL-17
1
04.07.2017, 16:28
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
04.07.2017, 16:28
Помогаю со студенческими работами здесь

Создание процесса загрузки в процедуре
Решил в свою старенькую програмку по просьбам юзверей реализовать визуальный процесс выполнения...

Создание Mail-in Database
В администраторе создаю Mail-in Database, мне надо внести перечень ФИО определенных пользователей....

Создание окон в процедуре другого окна
Добрый день, подскажите можно ли создавать и регистрировать классы, а так же создавать окна по ним...

Создание БД в Delphi (DATABASE, PARADOX 7)
Здравствуйте. очень нужна ваша помощь. сейчас бьюсь над базами данных, и ничего в них не смыслю....

Oracle Database : создание и хранение запросов
Есть сервер с базой, есть sql developer соединённый с сервером под своей учёткой и там создана...

Создание сервера на основе SQL server database file
Здравствуйте, люди. У меня возникла проблема. Пишу первый проэкт с изпользованием SQL server и C#....


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru