Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 Разбить файл клоб на отбельные pl/sql коамнды  [new]
ilyuha111
Member

Откуда:
Сообщений: 35
Добрый день
есть некий фал *.sql с набором различных DDL команд
create table T_WEB_ORDER_HEAD
(
web_order_head_id NUMBER not null,
date_insert DATE,
ret_date_order VARCHAR2(500),
ret_order_id VARCHAR2(500),
partner_make_id VARCHAR2(500),
partner_delivery_id VARCHAR2(500),
web_order_source VARCHAR2(500),
web_order_number VARCHAR2(500),
ret_people_name VARCHAR2(500),
ret_people_phone VARCHAR2(500),
asna_pay_type_name VARCHAR2(500),
asna_pay_type_id VARCHAR2(500),
ret_discount_doc_number VARCHAR2(500),
is_asna_econ NUMBER,
is_asna_cooperative_id VARCHAR2(500),
time_change_order VARCHAR2(200),
external_system_id NUMBER not null,
change_id NUMBER not null,
ret_client_email VARCHAR2(100),
ret_client_comment VARCHAR2(1000),
ret_pharmacy_address VARCHAR2(1000),
ret_client_address VARCHAR2(1000),
rezerv_date VARCHAR2(100),
with_transfer VARCHAR2(100),
urgent_delivery VARCHAR2(100),
product_sum VARCHAR2(100),
delivery_price VARCHAR2(100),
transfer_price VARCHAR2(100),
price VARCHAR2(100),
delivery_name VARCHAR2(100),
delivery_id VARCHAR2(100),
employ_id NUMBER,
remote_partner_id NUMBER,
comment_text VARCHAR2(1000)
);
/

-- Add comments to the columns
comment on column T_WEB_ORDER_HEAD.date_insert
is 'Дата вставки заказа';
comment on column T_WEB_ORDER_HEAD.ret_date_order
is 'Дата создания заказа в системе';
comment on column T_WEB_ORDER_HEAD.ret_order_id
is 'уникальный код заказа в системе';
comment on column T_WEB_ORDER_HEAD.partner_make_id
is 'уникальный код аптеки, на которой сделан заказ в системе';
comment on column T_WEB_ORDER_HEAD.partner_delivery_id
is 'уникальный код аптеки, которая выдает заказ в системе';
comment on column T_WEB_ORDER_HEAD.web_order_source
is 'источник заказа (телефон, почта и т.п.)';
comment on column T_WEB_ORDER_HEAD.web_order_number
is 'номер заказа в системе';
comment on column T_WEB_ORDER_HEAD.ret_people_name
is 'имя покупателя из системы';
comment on column T_WEB_ORDER_HEAD.ret_people_phone
is 'номер телефона из системы';
comment on column T_WEB_ORDER_HEAD.asna_pay_type_name
is 'тип оплаты (АСНА) из системы';
comment on column T_WEB_ORDER_HEAD.asna_pay_type_id
is ' ИД типа оплаты по справочнику АСНА из системы';
comment on column T_WEB_ORDER_HEAD.ret_discount_doc_number
is 'дисконтная карта из системы';
comment on column T_WEB_ORDER_HEAD.is_asna_econ
is 'признак АСНА-Экономия (0 - нет, 1 - да)';
comment on column T_WEB_ORDER_HEAD.is_asna_cooperative_id
is 'ИД совместной покупки (АСНА)';
comment on column T_WEB_ORDER_HEAD.time_change_order
is 'Дата изменения';
comment on column T_WEB_ORDER_HEAD.external_system_id
is 'Код системы заказа';
comment on column T_WEB_ORDER_HEAD.ret_client_email
is 'email из системы';
comment on column T_WEB_ORDER_HEAD.ret_client_comment
is 'Комментарий клиента из системы';
comment on column T_WEB_ORDER_HEAD.ret_pharmacy_address
is 'Адрес аптеки на который был создан заказ из системы';
comment on column T_WEB_ORDER_HEAD.ret_client_address
is 'Адрес клиента из системы';
comment on column T_WEB_ORDER_HEAD.employ_id
is 'Ссылка на исполнителя';
comment on column T_WEB_ORDER_HEAD.remote_partner_id
is 'Ссылка на аптеку для обменов';
/

-- Create/Recreate primary, unique and foreign key constraints
alter table T_WEB_ORDER_HEAD
add constraint PK_WEB_ORDER_HEAD_ID primary key (WEB_ORDER_HEAD_ID);
alter table T_WEB_ORDER_HEAD
add constraint FK_WEB_HEAD_TO_EXT_SYS_ID foreign key (EXTERNAL_SYSTEM_ID)
references T_EXTERNAL_SYSTEMS (EXTERNAL_SYSTEM_ID)
novalidate;
alter table T_WEB_ORDER_HEAD
add constraint FK_WOH_EMP foreign key (EMPLOY_ID)
references T_EMPLOY (EMPLOY_ID);
/


-- Create sequence
create sequence sq_web_order_head_id
minvalue 1
maxvalue 9999999999999999999
start with 1
increment by 1;
/

CREATE OR REPLACE TRIGGER tr_web_order_head_biu
before insert or update
on T_WEB_ORDER_HEAD
for each row

declare
begin
if :new.web_order_head_id is null then
select sq_web_order_head_id.nextval
into :new.web_order_head_id
from dual;
end if;

:new.remote_partner_id := pk_system.GetMyPartnerID;

select f_ret_change_id into :new.change_id from dual;

end tr_web_order_head_biu;
/
.........
храниться в поле клоб в базе
необходимо разбить этот файл на отдельные команды.
чтобы выполнить через execute immediate по одной

пробовал такой командой но криво выгружает триггеры и пакеты

select to_char(regexp_substr(blob_field, '[^/;]+', 1, level) ) from T_DDL_BLOB_test t

CONNECT BY level <100

если у кого-то опыт подобной работы ?
28 ноя 18, 13:50    [21747320]     Ответить | Цитировать Сообщить модератору
 Re: Разбить файл клоб на отбельные pl/sql коамнды  [new]
-2-
Member

Откуда:
Сообщений: 14095
ilyuha111
храниться
Если бы это был sqlplus-скрипт, то dbms_scheduler. В 12.1 случайно включили dbms_sqlplus_script, но в 12.2 выпилили.
Но, поскольку это что-то наколеночное, то не факт, что оно достаточно продумано для автоматического применения.
28 ноя 18, 14:55    [21747453]     Ответить | Цитировать Сообщить модератору
 Re: Разбить файл клоб на отбельные pl/sql коамнды  [new]
SY
Member

Откуда: Middlebury, CT USA
Сообщений: 9221
Для начала - скрипт кривой. Как ты думаешь что будет при выполнении скажем:

-- Create sequence 
create sequence sq_web_order_head_id
minvalue 1
maxvalue 9999999999999999999
start with 1
increment by 1;
/


SY.
28 ноя 18, 15:08    [21747485]     Ответить | Цитировать Сообщить модератору
 Re: Разбить файл клоб на отбельные pl/sql коамнды  [new]
-2-
Member

Откуда:
Сообщений: 14095
SY
Для начала - скрипт кривой.
Автор не заявлял, что это скрипт sqlplus'а. Вероятно этот скрипт используется в какой-нибудь поделке.
28 ноя 18, 15:19    [21747505]     Ответить | Цитировать Сообщить модератору
 Re: Разбить файл клоб на отбельные pl/sql коамнды  [new]
orawish
Member

Откуда: Гадюкино-2 (City)
Сообщений: 15436
-2-
SY
Для начала - скрипт кривой.
Автор не заявлял, что это скрипт sqlplus'а. Вероятно этот скрипт используется в какой-нибудь поделке.

.. если поделка приличная, то делась по мотивам синтаксиса таки sqlplus'а , а значит и вероятно ожидать схожего поведения
28 ноя 18, 16:53    [21747643]     Ответить | Цитировать Сообщить модератору
 Re: Разбить файл клоб на отбельные pl/sql коамнды  [new]
-2-
Member

Откуда:
Сообщений: 14095
orawish
если поделка приличная, то делась по мотивам синтаксиса таки sqlplus'а
Oracle SQL Developer за приличную поделку сойдет?
Интерактивное выполнение скрипта пропускает лишние слешы:
 СКРИПТ
set echo on
select 1 from dual;
/
create table xxx31 (n number);
/
drop table xxx31 purge;

 РЕЗУЛЬТАТ
SQL> select 1 from dual;

         1
----------
         1

SQL> /
SQL> create table xxx31 (n number);

Table XXX31 created.

SQL> /
SQL> drop table xxx31 purge;

Table XXX31 dropped.
28 ноя 18, 17:06    [21747657]     Ответить | Цитировать Сообщить модератору
 Re: Разбить файл клоб на отбельные pl/sql коамнды  [new]
orawish
Member

Откуда: Гадюкино-2 (City)
Сообщений: 15436
-2-,

да уж..
ожидать схожего поведения можно, но ожидать - не значит дождаться
28 ноя 18, 17:14    [21747675]     Ответить | Цитировать Сообщить модератору
 Re: Разбить файл клоб на отбельные pl/sql коамнды  [new]
orawish
Member

Откуда: Гадюкино-2 (City)
Сообщений: 15436
ilyuha111,

разделителей используйте не оба, а один /

в таком случае вы разделите файл на команду_или_группу_команд
а дальнейший разбор группы_команд на отдельные команды
не факт,что вообще вам нужен
28 ноя 18, 17:23    [21747683]     Ответить | Цитировать Сообщить модератору
 Re: Разбить файл клоб на отбельные pl/sql коамнды  [new]
ilyuha111
Member

Откуда:
Сообщений: 35
orawish
ilyuha111,

разделителей используйте не оба, а один /

в таком случае вы разделите файл на команду_или_группу_команд
а дальнейший разбор группы_команд на отдельные команды
не факт,что вообще вам нужен



Добрый день
один разделитель отлично работает когда в скрипте нет триггеров или пакетов
вопрос можно ли регулярным вырождением это вцепить
29 ноя 18, 14:23    [21748610]     Ответить | Цитировать Сообщить модератору
 Re: Разбить файл клоб на отбельные pl/sql коамнды  [new]
-2-
Member

Откуда:
Сообщений: 14095
ilyuha111
один разделитель отлично работает когда в скрипте нет триггеров или пакетов
У тебя недостаточно компетенций судить о прекрасностях.
ilyuha111
вырождением
Регулярки лишь малая часть лексических парсеров.
29 ноя 18, 14:35    [21748629]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить