Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Oracle [игнор отключен] [закрыт для гостей] / условный динамический синоним / 21 сообщений из 21, страница 1 из 1
29.11.2016, 14:39
    #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
29.11.2016, 14:43
    #39356883
andrey_anonymous
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
условный динамический синоним
Если разработчики сидят под собственными схемами, то проще каждому из них создать себе синоним в своей схеме на свою версию пакета.
...
Рейтинг: 0 / 0
29.11.2016, 14:55
    #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
29.11.2016, 21:42
    #39357315
Не понятно
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
условный динамический синоним
andrey_anonymous,

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

А ты злой.

ТС, не вздумай пользоваться, пока не осознаешь, чем это грозит.
...
Рейтинг: 0 / 0
30.11.2016, 13:30
    #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
30.11.2016, 13:58
    #39357646
Dima Ry
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
условный динамический синоним
oragrafEdition based,
А ты злой.
ТС, не вздумай пользоваться, пока не осознаешь, чем это грозит.

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

И я для просто посмотреть это дело запускал на 11.0.2.
На какие конкретно ограничения натолкнулся уже не вспомню.
Но вывод был такой - покамест штука бесполезная хоть и забавная.
...
Рейтинг: 0 / 0
01.12.2016, 04:56
    #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
Период между сообщениями больше года.
18.01.2018, 11:09
    #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
18.01.2018, 11:23
    #39586312
Elic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
условный динамический синоним
Dima RyПришла мысль -- а ведь хорошо было бы, если бы можно было к одной спецификации пакета иметь несколько package body.Бред.
...
Рейтинг: 0 / 0
18.01.2018, 12:47
    #39586365
-2-
-2-
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
условный динамический синоним
Dima RyВ ООП есть такая идеяТам эта идея нужна для использования объекта в методе третьего класса и имплементить можно множество интерфейсов. Поэтому:
create package body pkg_body1 for pkgA, pkgB, ...

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

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


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

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

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

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

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


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