powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / условный динамический синоним
21 сообщений из 21, страница 1 из 1
условный динамический синоним
    #39356879
Dima Ry
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Уважаемые специалисты, как можно решить такую проблему :

Несколько разработчиков редактируют один пакет.Они делают свои похожие копии пакетов.
pkg --> pkg1, pkg2, pkg3 ...


Можно ли на уровне сессии определить синоним или какой-то мультиплексор ?

что-то типа :
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
if user='user1' then
 create  session  synonym pkg for pkg1;
end if;
if user='user2' then
 create  session  synonym pkg for pkg2;
end if;

pkg.procedure();



Заранее спасибо за советы.
База Oracle 11g
...
Рейтинг: 0 / 0
условный динамический синоним
    #39356883
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если разработчики сидят под собственными схемами, то проще каждому из них создать себе синоним в своей схеме на свою версию пакета.
...
Рейтинг: 0 / 0
условный динамический синоним
    #39356910
Фотография mRdUKE
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima Ryчто-то типа :After logon Trigger:
Код: plsql
1.
2.
3.
4.
5.
...
if user='user1' then
 EXECUTE IMMEDIATE 'CREATE OR REPLACE SYNONYM PKG FOR SCHEMA.PKG1';
end if;
...

?
...
Рейтинг: 0 / 0
условный динамический синоним
    #39357315
Не понятно
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
andrey_anonymous,

Думаю, что про синонимы ТС в курсе.
Подозреваю, что его волнует другое.
Пакет, который правят несколько разрабов, используется в других пакетах. Как им подставить в боевые пакеты ссылки на свои тестовые вместо того боевого, который они правят. Так, Дмитрий?
...
Рейтинг: 0 / 0
условный динамический синоним
    #39357351
EBR или клонируй схемы. Все равно гипотетический синоним покрывает только очень узкий сценарий, когда api неизменно. А что тогда менять, форматирование и комментарии?
mRdUKEAfter logon Triggerтупо
...
Рейтинг: 0 / 0
условный динамический синоним
    #39357391
Edition based
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dima Ry, CREATE EDITION каждому и пусть веселятся.
Слияние того, что каждый сам себе налабал, в очередную версию, да еще чтоб совместимо меж собой было - отдельный вопрос и процесс.
А в целом - работа нескольких разрабов над одной програмной единицей - признак криво поставленного процесса разработки, результатом которого будут не пакеты/процедуры/функции, а набор писем дяди Фёдора из Простоквашино...
...
Рейтинг: 0 / 0
условный динамический синоним
    #39357469
oragraf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Edition based,

А ты злой.

ТС, не вздумай пользоваться, пока не осознаешь, чем это грозит.
...
Рейтинг: 0 / 0
условный динамический синоним
    #39357613
Dima Ry
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я придумал такой несколько спорный способ :

Автоматически сгенерировать пакет-мультиплексор. В этом пакете каждая функция имеет заглушки.
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
create or replace package body pkg0 as

function fun(p1 varchar, p2 in out varchar) return varchar 
is
begin
  if user='user1' then
     return pkg1.fun(p1,p2);
  end if;
  if user='user2' then
     return pkg2.fun(p1,p2);
  end if;

  return pkg.fun(p1,p2);
end;
...
Рейтинг: 0 / 0
условный динамический синоним
    #39357646
Dima Ry
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
oragrafEdition based,
А ты злой.
ТС, не вздумай пользоваться, пока не осознаешь, чем это грозит.

Наши админы говорят, что уже пробовали такое включить на одном из серверов. Правда выключить оказалось почти невозможно.
...
Рейтинг: 0 / 0
условный динамический синоним
    #39358030
Dima Ry,

И я для просто посмотреть это дело запускал на 11.0.2.
На какие конкретно ограничения натолкнулся уже не вспомню.
Но вывод был такой - покамест штука бесполезная хоть и забавная.
...
Рейтинг: 0 / 0
условный динамический синоним
    #39358129
Фотография SeaGate
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima Ry,
Dima RyЯ придумал такой несколько спорный способ :
Для этой задачи и этой версии я бы развернул облако - DBaaS Cloud и любую подходящую provisioning scheme: Schema-as-a-service, DBaaS (например, если БД большая, могли бы использовать Thin Provisioning). Подробное описание процесса доступно в документации OEM Cloud Administration Guide, 18 Enabling the DBaaS Cloud
Программисты будут сами запрашивать новую схему/БД, используя OEM Self-Service Portal, или можете написать свое приложение, использующее имеющееся REST API, например, на Apex в два клика, как аналогичное приложение на OTN, где PDB-as-a-service автоматизировали.

На версиях поновее, я бы внедрил Application Containers .

Краткое демо:

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
140.
141.
142.
143.
144.
145.
146.
147.
148.
149.
150.
151.
152.
153.
154.
155.
156.
157.
158.
159.
160.
161.
162.
163.
164.
165.
166.
167.
168.
169.
170.
171.
172.
173.
174.
175.
176.
177.
178.
179.
180.
181.
182.
183.
184.
185.
186.
187.
188.
189.
190.
191.
192.
193.
194.
195.
196.
197.
198.
199.
200.
201.
202.
203.
204.
205.
206.
207.
208.
209.
210.
211.
212.
213.
214.
215.
216.
217.
218.
219.
220.
221.
222.
223.
224.
225.
226.
227.
228.
229.
230.
231.
232.
233.
234.
SQL> conn / as sysdba
Connected.
SQL> 
SQL> doc
DOC>  Creating Application Container
DOC>#
SQL> create pluggable database pdb_dyn_syn
  2    as application container
  3    admin user pdb_admin
  4    identified by oracle
  5    roles=(DBA)
  6    default tablespace users
  7  	 datafile size 10M autoextend on;

Pluggable database created.

SQL> 
SQL> alter pluggable database pdb_dyn_syn open;

Pluggable database altered.

SQL> 
SQL> alter session set container=pdb_dyn_syn;

Session altered.

SQL> 
SQL> doc
DOC>  Install new application
DOC>#
SQL> alter pluggable database application appl1 begin install 'v.1.0';

Pluggable database altered.

SQL> 
SQL> create user app_owner identified by app_owner;

User created.

SQL> 
SQL> grant create session, create procedure to app_owner;

Grant succeeded.

SQL> 
SQL> conn app_owner/app_owner@'localhost/pdb_dyn_syn'
Connected.
SQL> 
SQL> create or replace procedure p2
  2  is
  3  begin
  4    dbms_output.put_line($$plsql_unit);
  5  end;
  6  /

Procedure created.

SQL> create or replace procedure p1
  2  is
  3  begin
  4    dbms_output.put_line($$plsql_unit);
  5    p2;
  6  end;
  7  /

Procedure created.

SQL> 
SQL> conn sys/change_on_install@'localhost/pdb_dyn_syn' as sysdba
Connected.
SQL> doc
DOC>  Finish application installation
DOC>#
SQL> 
SQL> alter pluggable database application appl1 end install 'v.1.0';

Pluggable database altered.

SQL> 
SQL> doc
DOC>  Clone Application Root PDB
DOC>#
SQL> alter user app_owner set container_data=all container=current;

User altered.

SQL> 
SQL> create pluggable database pdb_dyn_syn_dev1
  2    admin user pdb_admin
  3    identified by oracle
  4    roles=(DBA)
  5    default tablespace users
  6  	 datafile size 10M autoextend on;

Pluggable database created.

SQL> 
SQL> alter pluggable database pdb_dyn_syn_dev1 open;

Pluggable database altered.

SQL> doc
DOC>  This container does not contain any data after the time when the installation started
DOC>#
SQL> 
SQL> alter session set container=pdb_dyn_syn_dev1;

Session altered.

SQL> 
SQL> exec app_owner.p1
BEGIN app_owner.p1; END;

      *
ERROR at line 1:
ORA-06550: line 1, column 7:
PLS-00201: identifier 'APP_OWNER.P1' must be declared
ORA-06550: line 1, column 7:
PL/SQL: Statement ignored


SQL> 
SQL> doc
DOC>  Let's synchronize the App PDB and transfer any in-flight changes from the parent application
DOC>#
SQL> 
SQL> alter pluggable database application appl1 sync;

Pluggable database altered.

SQL> 
SQL> set serverout on
SQL> exec app_owner.p1
P1
P2

PL/SQL procedure successfully completed.

SQL> 
SQL> doc
DOC>  Let's change the procedure within the Application PDB
DOC>#
SQL> create or replace procedure p1
  2  is
  3  begin
  4    dbms_output.put_line(sys_context('userenv','con_name')||'.'||$$plsql_unit);
  5    p2;
  6  end;
  7  /

Warning: Procedure created with compilation errors.

SQL> 
SQL> exec app_owner.p1
P1
P2

PL/SQL procedure successfully completed.

SQL> 
SQL> doc
DOC>  Now I am about to upgrade the application
DOC>#
SQL> conn sys/change_on_install@'localhost/pdb_dyn_syn' as sysdba
Connected.
SQL> 
SQL> alter pluggable database application appl1 begin upgrade 'v.1.0' to 'v.2.0';

Pluggable database altered.

SQL> 
SQL> conn app_owner/app_owner@'localhost/pdb_dyn_syn'
Connected.
SQL> 
SQL> create or replace procedure p2
  2  is
  3  begin
  4    dbms_output.put_line('v2.'||$$plsql_unit);
  5  end;
  6  /

Procedure created.

SQL> create or replace procedure p1
  2  is
  3  begin
  4    dbms_output.put_line('v2.'||$$plsql_unit);
  5    p2;
  6  end;
  7  /

Procedure created.

SQL> conn sys/change_on_install@'localhost/pdb_dyn_syn' as sysdba
Connected.
SQL> alter pluggable database application appl1 end upgrade to 'v.2.0';

Pluggable database altered.

SQL> 
SQL> doc
DOC>  Let's check if something has changed in the App PDB
DOC>#
SQL> conn app_owner/app_owner@'localhost/pdb_dyn_syn_dev1'
Connected.
SQL> 
SQL> set serverout on
SQL> exec p1
P1
P2

PL/SQL procedure successfully completed.

SQL> 
SQL> doc
DOC>  Sync
DOC>#
SQL> conn sys/change_on_install@'localhost/pdb_dyn_syn_dev1' as sysdba
Connected.
SQL> 
SQL> alter pluggable database application appl1 sync;

Pluggable database altered.

SQL> 
SQL> conn app_owner/app_owner@'localhost/pdb_dyn_syn_dev1'
Connected.
SQL> 
SQL> set serverout on
SQL> exec p1
v2.P1
v2.P2

PL/SQL procedure successfully completed.



Здесь, соответственно, дальше простор для автоматизации. Программисты бранчуются, творят, коммитят в git. Release-manager собирает это хозяйство, через CI какой-нибудь запихивает в Application Root, программисты вызывают синхронизацию в App PDB, или принудительно их синхронизировать, чтобы каждый получил свежую версию поделки.
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
условный динамический синоним
    #39586301
Dima Ry
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima Ry,

Пришла мысль -- а ведь хорошо было бы, если бы можно было к одной спецификации пакета иметь несколько package body.
В ООП есть такая идея, что ты сначала описываешь интерфейс (по нашему спецификацию пакета), потом оперируешь только с ним и не паришся какая реализация (тело пакета). Ораклу такое сделать очень просто.

create package pkg ....

create package body pkg_body1 for pkg...
create package body pkg_body2 for pkg...
create package body pkg_body3 for pkg...



в программе пишешь
begin
use pkg with pkg_body1;
pkg.function1;
pkg.function2;

use pkg with pkg_body2;
pkg.function1;
pkg.function2;

use pkg with pkg_body3;
pkg.function1;
pkg.function2;

end;
...
Рейтинг: 0 / 0
условный динамический синоним
    #39586312
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima RyПришла мысль -- а ведь хорошо было бы, если бы можно было к одной спецификации пакета иметь несколько package body.Бред.
...
Рейтинг: 0 / 0
условный динамический синоним
    #39586365
Фотография -2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima RyВ ООП есть такая идеяТам эта идея нужна для использования объекта в методе третьего класса и имплементить можно множество интерфейсов. Поэтому:
create package body pkg_body1 for pkgA, pkgB, ...

Только пользоваться в оракле этим никто, кроме маргиналов-экскрементаторов, не будет.
...
Рейтинг: 0 / 0
условный динамический синоним
    #39618800
Dima Ry
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
-2-Dima RyВ ООП есть такая идеяТам эта идея нужна для использования объекта в методе третьего класса и имплементить можно множество интерфейсов. Поэтому:
create package body pkg_body1 for pkgA, pkgB, ...

Только пользоваться в оракле этим никто, кроме маргиналов-экскрементаторов, не будет.


Вы не поняли аналогию с ооп --- я имел в виду чистые интерфейсы. Доволно удобная вещь
...
Рейтинг: 0 / 0
условный динамический синоним
    #39618807
merch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima Ry, один мой знакомый часто использовал фразу "ООП головного мозга". Это он про Вас?
...
Рейтинг: 0 / 0
условный динамический синоним
    #39618819
Фотография -2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima Ryя имел в виду чистые интерфейсыТо, что ты описал - это полиморфизм, в оралке реализованный с помощью объектных типов.
...
Рейтинг: 0 / 0
условный динамический синоним
    #39618918
Dima Ry
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
merchDima Ry, один мой знакомый часто использовал фразу "ООП головного мозга". Это он про Вас?

Не, я как раз против ООП во всей его красе. Мне как раз стиль plsql без примочек нравится больше. Но абстрактные интерфейсы - штука полезная. Не обязательно это должно быть связано с объектами.
...
Рейтинг: 0 / 0
условный динамический синоним
    #39618920
Dima Ry
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
-2-Dima Ryя имел в виду чистые интерфейсыТо, что ты описал - это полиморфизм, в оралке реализованный с помощью объектных типов.

Не совсем, я против объектов.

Я их уже накушался, наблюдается устойчивая отрыжка
...
Рейтинг: 0 / 0
условный динамический синоним
    #39618991
Фотография -2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima RyЯ их уже накушалсяНазови три причины, почему "create type" отрыжистей "create package" относительно твоего "use pkg with body1 ...".
...
Рейтинг: 0 / 0
условный динамический синоним
    #39618994
Dima Ry
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
-2-Dima RyЯ их уже накушалсяНазови три причины, почему "create type" отрыжистей "create package" относительно твоего "use pkg with body1 ...".

а почему не 3.14 ?
...
Рейтинг: 0 / 0
21 сообщений из 21, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / условный динамический синоним
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]