Удаление управляющих символов из строки
Для удаления управляющих символов (не отображаемых) можно использовать регулярные выражения:
- REGEXP_LIKE — для поиска значений с управляющими символами
- REGEXP_REPLACE — для удаления управляющих символов
select str, regexp_replace(t.str, '[[:cntrl:]]') as new_str from ( select 'test1'||chr(28) as str from dual union all select 'test2' from dual union all select 'test3+_*- =\\\|()^%#3@' from dual ) t where regexp_like(t.str, '[[:cntrl:]]') STR NEW_STR ---------------------- ---------------------- test1 test1
OEBS API BOM – Создание спецификаций через интерфейсные таблицы
Описание шагов по заполнение интерфейсных таблиц для создания спецификаций (комплектов позиций).
1) Таблица BOM_BILL_OF_MTLS_INTERFACE — заголовок
список обязательных полей:
- assembly_item_id
- item_number
- organization_id
- organization_code
- transaction_type
- process_flag
2) Таблица BOM_INVENTORY_COMPS_INTERFACE — строки
список обязательных полей:
- operation_seq_num
- item_num
- component_quantity
- component_item_id
- component_item_number
- organization_id
- organization_code
- assembly_item_id
- assembly_item_number
- transaction_type
- process_flag
Читать дальше про “OEBS API BOM – Создание спецификаций через интерфейсные таблицы” »
OEBS API INV – Удаление резервирований для позиции
Пример использования API для удаления резервирований позиции:
declare l_rsv_rec inv_reservation_global.mtl_reservation_rec_type; l_serial_number_tbl_type inv_reservation_global.serial_number_tbl_type; -- lx_return_status varchar2(1); lx_msg_data varchar2(4000); lx_msg_count number; begin fnd_global.apps_initialize(-1, 20634, 401); --Запасы - Запасы for i_cur in (select * from mtl_reservations t where 1=1 and rownum=1 -- and ... ) loop l_rsv_rec.reservation_id := i_cur.reservation_id; l_rsv_rec.organization_id := i_cur.organization_id; l_rsv_rec.inventory_item_id := i_cur.inventory_item_id; l_rsv_rec.demand_source_type_id := i_cur.demand_source_type_id; l_rsv_rec.demand_source_header_id := i_cur.demand_source_header_id; l_rsv_rec.demand_source_line_id := i_cur.demand_source_line_id; l_rsv_rec.primary_uom_code := i_cur.primary_uom_code; l_rsv_rec.reservation_uom_code := i_cur.reservation_uom_code; -- l_rsv_rec.reservation_quantity := 1;--i_cur.reservation_quantity; -- l_rsv_rec.primary_reservation_quantity := 1;--i_cur.primary_reservation_quantity; l_rsv_rec.supply_source_type_id := i_cur.supply_source_type_id; inv_reservation_pub.delete_reservation(p_api_version_number => 1.0 ,p_rsv_rec => l_rsv_rec ,p_serial_number => l_serial_number_tbl_type ,x_return_status => lx_return_status ,x_msg_count => lx_msg_count ,x_msg_data => lx_msg_data ); dbms_output.put_line(lx_return_status); if (lx_return_status <> 'S') then fnd_msg_pub.count_and_get(p_encoded => fnd_api.g_false, p_count => lx_msg_count, p_data => lx_msg_data); dbms_output.put_line('ERROR delete_reservation for reservation_id =' ||l_rsv_rec.reservation_id ||':'); if lx_msg_count = 1 then dbms_output.put_line(lx_msg_data); else FOR i IN 1 .. lx_msg_count LOOP dbms_output.put_line(fnd_msg_pub.get(fnd_msg_pub.g_next,fnd_api.g_false)); END LOOP; end if; end if; commit; end loop; end;
OEBS API INV – Текущее количество для позиции (ONHAND)
Пример использования API для получения текущего или доступного для резервирования количества для позиции:
declare p_organization_id NUMBER := 155; p_inventory_item_id NUMBER := 546; -- p_revision VARCHAR2(3); p_lot_number VARCHAR2(80); p_subinventory_code VARCHAR2(10) := 'VAlVALVAL'; p_locator_id NUMBER; -- lx_qoh NUMBER; -- Total Quantity (Onhand) lx_rqoh NUMBER; lx_qr NUMBER; lx_qs NUMBER; lx_att NUMBER; -- Available to Transact lx_atr NUMBER; -- Available to Reserve -- lx_return_status VARCHAR2(1); lx_msg_count NUMBER; lx_msg_data VARCHAR2(4000); begin inv_quantity_tree_grp.clear_quantity_cache; inv_quantity_tree_pub.query_quantities( p_api_version_number => 1.0, p_init_msg_lst => fnd_api.g_false, x_return_status => lx_return_status, x_msg_count => lx_msg_count, x_msg_data => lx_msg_data, -- p_organization_id => p_organization_id, p_inventory_item_id => p_inventory_item_id, p_tree_mode => apps.inv_quantity_tree_pub.g_transaction_mode, p_is_revision_control => case when p_revision is null then FALSE else TRUE end, p_is_lot_control => case when p_lot_number is null then FALSE else TRUE end, p_is_serial_control => FALSE, p_revision => p_revision, p_lot_number => p_lot_number, p_subinventory_code => p_subinventory_code, p_locator_id => p_locator_id, x_qoh => lx_qoh, -- OnHand Quantity x_rqoh => lx_rqoh, x_qr => lx_qr, x_qs => lx_qs, x_att => lx_att, -- Available To Transact x_atr => lx_atr -- Available To Reserve ); if lx_return_status ='S' then DBMS_OUTPUT.put_line ('Общее количество: ' || lx_qoh); DBMS_OUTPUT.put_line ('Доступно для резервирования: ' || lx_atr); DBMS_OUTPUT.put_line ('Доступно для транзакции: ' || lx_att); else fnd_msg_pub.count_and_get(p_encoded => fnd_api.g_false, p_count => lx_msg_count, p_data => lx_msg_data); dbms_output.put_line('ERROR for p_inventory_item_id='||p_inventory_item_id); if lx_msg_count = 1 then dbms_output.put_line(lx_msg_data); else FOR i IN 1 .. lx_msg_count LOOP dbms_output.put_line(fnd_msg_pub.get(fnd_msg_pub.g_next, fnd_api.g_false)); END LOOP; end if; end if; end;
Так же есть запрос для просмотра текущего количества Модуль INV – Текущее количество для позиции
Скрипт вывода полей для XML шаблона данных на основе таблицы
Скрипт вывода столбцов таблицы в XML шаблон данных( BI Publisher Data Template )
declare p_table_owner varchar2(30) := 'APPLSYS'; p_table_name varchar2(30) := 'FND_USER'; begin for i_cur in ( select t.column_name ,t.data_type ,max(length(t.column_name)) over() - length(t.column_name) as cur_gap_length from all_tab_columns t where 1=1 and t.owner = p_table_owner and t.table_name = p_table_name order by t.column_id ) loop dbms_output.put_line('<element name="' ||i_cur.column_name ||'"'||rpad(' ',i_cur.cur_gap_length)||' value="'||i_cur.column_name ||'" />'); end loop; end; -- Пример вывода <element name="USER_ID" value="USER_ID" /> <element name="USER_NAME" value="USER_NAME" /> <element name="LAST_UPDATE_DATE" value="LAST_UPDATE_DATE" /> <element name="LAST_UPDATED_BY" value="LAST_UPDATED_BY" /> <element name="CREATION_DATE" value="CREATION_DATE" /> <element name="CREATED_BY" value="CREATED_BY" /> <element name="LAST_UPDATE_LOGIN" value="LAST_UPDATE_LOGIN" /> <element name="ENCRYPTED_FOUNDATION_PASSWORD" value="ENCRYPTED_FOUNDATION_PASSWORD" /> <element name="ENCRYPTED_USER_PASSWORD" value="ENCRYPTED_USER_PASSWORD" /> <element name="SESSION_NUMBER" value="SESSION_NUMBER" /> <element name="START_DATE" value="START_DATE" /> <element name="END_DATE" value="END_DATE" /> <element name="DESCRIPTION" value="DESCRIPTION" /> <element name="LAST_LOGON_DATE" value="LAST_LOGON_DATE" /> <element name="PASSWORD_DATE" value="PASSWORD_DATE" /> <element name="PASSWORD_ACCESSES_LEFT" value="PASSWORD_ACCESSES_LEFT" /> <element name="PASSWORD_LIFESPAN_ACCESSES" value="PASSWORD_LIFESPAN_ACCESSES" /> <element name="PASSWORD_LIFESPAN_DAYS" value="PASSWORD_LIFESPAN_DAYS" /> <element name="EMPLOYEE_ID" value="EMPLOYEE_ID" /> <element name="EMAIL_ADDRESS" value="EMAIL_ADDRESS" /> <element name="FAX" value="FAX" /> <element name="CUSTOMER_ID" value="CUSTOMER_ID" /> <element name="SUPPLIER_ID" value="SUPPLIER_ID" /> <element name="WEB_PASSWORD" value="WEB_PASSWORD" /> <element name="USER_GUID" value="USER_GUID" /> <element name="GCN_CODE_COMBINATION_ID" value="GCN_CODE_COMBINATION_ID" /> <element name="PERSON_PARTY_ID" value="PERSON_PARTY_ID" />
OAF: Передача параметра с кириллицей в URL
Oracle Application Framework: Пример кода для передачи параметра с кириллицей в URL.
import java.io.UnsupportedEncodingException; import java.net.URLEncoder; import oracle.apps.fnd.framework.OANLSServices; import oracle.apps.fnd.framework.server.OAApplicationModuleImpl; ... OAApplicationModuleImpl am = (OAApplicationModuleImpl)pageContext.getApplicationModule(webBean); OANLSServices nls = am.getOADBTransaction().getOANLSServices(); try { pAssignmentSet = URLEncoder.encode(pAssignmentSet, nls.getJAVAClientEncoding()); } catch (UnsupportedEncodingException e) { throw new OAException(e.getMessage()); } ...
OEBS API: Деактивация контрагента в HZ_PAPTIES (тип person)
Пример использования API для перевода контрагента (таблица HZ_PAPTIES) с типом “PERSON” в статус “Неактивно”:
declare p_party_id number := 17323325; -- l_person_rec HZ_PARTY_V2PUB.PERSON_REC_TYPE; l_party_rec HZ_PARTY_V2PUB.PARTY_REC_TYPE; l_object_version_number number; -- x_profile_id NUMBER; x_return_status VARCHAR2(1); x_msg_count NUMBER; x_msg_data VARCHAR2(4000); begin fnd_global.apps_initialize(-1, 20639, 200); --Диспетчер кредиторов - Кредиторы l_party_rec.party_id := p_party_id; l_party_rec.status := 'I'; l_person_rec.party_rec := l_party_rec; select hp.object_version_number into l_object_version_number from hz_parties hp where hp.party_id = l_party_rec.party_id; hz_party_v2pub.update_person ( p_init_msg_list => fnd_api.g_false, p_person_rec => l_person_rec, p_party_object_version_number => l_object_version_number, x_profile_id => x_profile_id, x_return_status => x_return_status, x_msg_count => x_msg_count, x_msg_data => x_msg_data ); dbms_output.put_line(x_return_status); if (x_return_status <> 'S') then fnd_msg_pub.count_and_get(p_encoded => fnd_api.g_false, p_count => x_msg_count, p_data => x_msg_data); dbms_output.put_line('ERROR update for party_id='||l_party_rec.party_id||':'); if x_msg_count = 1 then dbms_output.put_line(x_msg_data); else FOR i IN 1 .. x_msg_count LOOP dbms_output.put_line(fnd_msg_pub.get(fnd_msg_pub.g_next, fnd_api.g_false)); END LOOP; end if; end if; commit; end;
OEBS API: Деактивация контрагента в HZ_PAPTIES (тип organization)
Пример использования API для перевода контрагента (таблица HZ_PAPTIES) с типом «organization» в статус “Неактивно”:
declare p_party_id number := 2661479911; -- l_organization_rec HZ_PARTY_V2PUB.ORGANIZATION_REC_TYPE; l_party_rec HZ_PARTY_V2PUB.PARTY_REC_TYPE; l_object_version_number number; -- x_profile_id NUMBER; x_return_status VARCHAR2(1); x_msg_count NUMBER; x_msg_data VARCHAR2(4000); begin fnd_global.apps_initialize(-1, 20639, 200); --Диспетчер кредиторов - Кредиторы l_party_rec.party_id := p_party_id; l_party_rec.status := 'I'; l_organization_rec.party_rec := l_party_rec; select hp.object_version_number into l_object_version_number from hz_parties hp where hp.party_id = l_party_rec.party_id; HZ_PARTY_V2PUB.update_organization(p_init_msg_list => fnd_api.g_false, p_organization_rec => l_organization_rec, p_party_object_version_number => l_object_version_number, x_profile_id => x_profile_id, x_return_status => x_return_status, x_msg_count => x_msg_count, x_msg_data => x_msg_data); dbms_output.put_line(x_return_status); if (x_return_status <> 'S') then fnd_msg_pub.count_and_get(p_encoded => fnd_api.g_false, p_count => x_msg_count, p_data => x_msg_data); dbms_output.put_line('ERROR update for party_id='||l_party_rec.party_id||':'); if x_msg_count = 1 then dbms_output.put_line(x_msg_data); else FOR i IN 1 .. x_msg_count LOOP dbms_output.put_line(fnd_msg_pub.get(fnd_msg_pub.g_next, fnd_api.g_false)); END LOOP; end if; end if; commit; end;
OEBS API: Деактивация счета заказчика
Пример использования API для перевода счета заказчика в статус «Неактивно» — деактивация счета заказчика.
declare l_cust_account_rec hz_cust_account_v2pub.cust_account_rec_type; l_object_version_number number; -- x_return_status varchar2(1); x_msg_data varchar2(4000); x_msg_count number; begin l_cust_account_rec := null; l_cust_account_rec.cust_account_id := 9787987; l_cust_account_rec.status := 'I'; select ca.object_version_number into l_object_version_number from hz_cust_accounts ca where cust_account_id = l_cust_account_rec.cust_account_id; -- Call the procedure hz_cust_account_v2pub.update_cust_account(p_init_msg_list => 'T', p_cust_account_rec => l_cust_account_rec, p_object_version_number => l_object_version_number, x_return_status => x_return_status, x_msg_count => x_msg_count, x_msg_data => x_msg_data); dbms_output.put_line('x_return_status='||x_return_status); commit; end;
Oracle SQL*Loader
SQL*Loader — мощный инструмент для импорта различных данных из файла в базу данных.
Если надо загрузить что-либо из файла в БД, то этот инструмент, как раз то что вам поможет.
- Возможности SQL*Loader
- Управляющий файл CTL
- Запуск импорта данных
- Опции командной строки
- Данные для загрузки непосредственно в управляющем файле
- Данные с разными разделителями в данных + форматирование даты
Возможности SQL*Loader
- Загрузка данных из разных файлов в одной сессии
- Загрузка данных в разные таблицы в одной сессии
- Указание кодировки файла данных
- Использование SQL функций перед загрузкой
- Генерация уникальных ключей для колонок
- Ограничение вставляемых данных по условию
- Загрузка двоичных данных
- Запись ошибочных данных в файл ошибок
Последние комментарии