powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Параметризованная внешняя таблица
19 сообщений из 19, страница 1 из 1
Параметризованная внешняя таблица
    #39999541
НеофитSQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Сделал доступ к веб сервису через внешнюю таблицу (спасибо SY за подсказку) и препроцессор скрипт.

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

Подскажите, кроме сохранения параметра в дисковый файл, есть еще варианты?
...
Рейтинг: 0 / 0
Параметризованная внешняя таблица
    #39999637
dmdmdm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
НеофитSQL
доступ к веб сервису через внешнюю таблицу


Вы сначала задачу опишите, а не способ решения.

А то у неофитов способы (почему-то всегда) через задницу странные.

Задачи доступа к web-сервису обычно решаются не средствами СУБД.
...
Рейтинг: 0 / 0
Параметризованная внешняя таблица
    #39999648
Фотография env
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
НеофитSQL,

Откройте для себя ETL-средства.
...
Рейтинг: 0 / 0
Параметризованная внешняя таблица
    #39999685
andreymx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
НеофитSQL
Сделал доступ к веб сервису через внешнюю таблицу (спасибо SY за подсказку) и препроцессор скрипт.
дайте ссылку полюбопытствовать
...
Рейтинг: 0 / 0
Параметризованная внешняя таблица
    #39999972
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
НеофитSQL

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


Очень даже подсказывает - никаких явных параметров:

If the preprocessor program requires any arguments (for example, gunzip -c), then you must specify the program name and its arguments in an executable shell script (or on Windows operating systems, in a batch (.bat) file). Shell scripts and batch files have certain requirements, as discussed in the following sections.

ORACLE автоматом передает:

The data file listed in the external table LOCATION clause should be referred to by $1.

SY.
...
Рейтинг: 0 / 0
Параметризованная внешняя таблица
    #40000023
НеофитSQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SY,

Спасибо, значит я ничего не пропустил. Уже работает.
Пришлось просто записать параметр в файл на диске, который препроцессор видит.

dmdmdm,

нужно было пополнять таблицу информацией от веб сервиса по команде с клиента.
Пользователь нажимает кнопочку на экране, и через секунду видит все подробности.

Чтобы реализовать, написал PL/SQL функцию
Код: plsql
1.
QueryClientAttributes(client_id in,cache_policy in) return t_record

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

Функция пишет параметр client_id в дисковый файл, а потом читает из внешней таблицы типа ORACLE_LOADER.

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

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

Ничего сложного, но практически все темы для меня новые, и мой вдобавок мой SOAP клиент настаивал на UTF-16.
После добавления строчки в кэш-таблицу, я вызываю commit.
Его действие локальное, т.к. для функции объявлена PRAGMA AUTONOMOUS_TRANSACTION;
...
Рейтинг: 0 / 0
Параметризованная внешняя таблица
    #40000027
Фотография env
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
НеофитSQL,

Просто нет слов... Это даже не небоскрёб из дерева это что-то эпичнее.
...
Рейтинг: 0 / 0
Параметризованная внешняя таблица
    #40000037
НеофитSQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо, без рекомендаций и советов форума такое бы сам не слепил ;)
...
Рейтинг: 0 / 0
Параметризованная внешняя таблица
    #40000040
Фотография Sayan Malakshinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
НеофитSQL,

А кнопычка на экране сразу к базе прикручена?
...
Рейтинг: 0 / 0
Параметризованная внешняя таблица
    #40000041
Фотография env
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
НеофитSQL,

У меня только один вопрос. А почему это нельзя было по нормальному сделать?
...
Рейтинг: 0 / 0
Параметризованная внешняя таблица
    #40000045
Фотография кит северных морей
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
НеофитSQL
Функция пишет параметр client_id в дисковый файл, а потом читает из внешней таблицы типа ORACLE_LOADER.

не надо писать client_id в файл. надо больше ада. надо писать client_id в key-value таблицу, ключом будет имя файла, передаваемое в препроцессор. препроцессор должен заходить в базу, по известному ему имени файла читать значение client_id, и потом дергать веб-сервис. после получения данных из веб-сервиса отдаем их из препроцессора построчно, логгируя каждую строку в бд - на всякий случай.
...
Рейтинг: 0 / 0
Параметризованная внешняя таблица
    #40000070
НеофитSQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
env
НеофитSQL,

У меня только один вопрос. А почему это нельзя было по нормальному сделать?


Потому что когда я спрашивал как это лучше делать, почти все промолчали.
Дело то ждать не будет.

Это можно было сделать на клиенте, на сервере, или в среднем звене.
Среднее звено было написано очень давно, и его стараются не трогать.
Делать с клиента означает апгрейд, плюс распространение новых библиотек для SOAP, плюс мороки с паролем сервиса - его надо клиенту давать.

Оставался сервер. UTL_HTTP мне добрые люди посоветовали не трогать, совать JAX в БД я не решился, поэтому веб сервис опрашивается из отдельного дочернего процесса, и обмен данными происходит через ОС пайп.
...
Рейтинг: 0 / 0
Параметризованная внешняя таблица
    #40000139
dmdmdm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
нужно было пополнять таблицу информацией от веб сервиса по команде с клиента.
Пользователь нажимает кнопочку на экране, и через секунду видит все подробности.нужно было пополнять таблицу информацией от веб сервиса по команде с клиента.


Данная задача не требует наворотов с внешней таблицей, скриптами и пр. Отговорки "было написано очень давно" как раз и появляются, когда такие небоскребы достаются по наследству.

Намекните контору, где вы это ваяете, чтобы от этого места ходить подальше.

когда я спрашивал как это лучше делать, почти все промолчали.

Извините, я отвлекался на работу, за которую деньги получаю.

Для остальных, от которых вы ожидаете развернутого ответа в течение суток, оставьте информацию, когда и куда заходить за частью вашей зарплаты.
...
Рейтинг: 0 / 0
Параметризованная внешняя таблица
    #40000144
Фотография кит северных морей
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
НеофитSQL
Потому что когда я спрашивал как это лучше делать, почти все промолчали.

если вам очень нужно вызвать сторонний код из БД - лучше вызывать его не из препроцессора, а из DBMS_SCHEDULER - он позволяет стартовать дочерние процессы за пределами БД, причем делать это асинхронно, в нужном порядке, без плясок с pq_concurrent_union и параметрами, сохраненными в файле на диске.

грубо говоря, одновременно запускаем 5 scheduler jobs, которые готовят вам данные. дождавшись всех (или не всех - как вам удобно), подкладываем эти данные под external table, и читаем ее уже безо всяких сложных препроцессоров.
...
Рейтинг: 0 / 0
Параметризованная внешняя таблица
    #40000152
Фотография env
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
НеофитSQL
Потому что когда я спрашивал как это лучше делать

Так вы и не спрашивали "как лучше сделать". Вы спрашивали "как в union all не писать а-ля бейсик".

Если бы изначально задача была поставлена в правильном виде, то первой же рекомендацией было бы создание ETL/ELT процесса загрузки данных из сервиса.
...
Рейтинг: 0 / 0
Параметризованная внешняя таблица
    #40000216
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
env
Если бы изначально задача была поставлена в правильном виде, то первой же рекомендацией было бы создание ETL/ELT процесса загрузки данных из сервиса.


ETL - достаточно удобная штука для решения задач интеграции по данным.
Но в плане интеграции приложений еще удобнее инструменты соответствующего (EAI) класса.
https://www.gartner.com/reviews/market/application-integration-platforms
...
Рейтинг: 0 / 0
Параметризованная внешняя таблица
    #40000227
Фотография env
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrey_anonymous,

У ТС это означало бы добавление ещё одного звена, а там и так всё плохо с имеющимися.

Задача ТС в принципе не должна решаться со стороны БД, если требуется состояние ответа сервиса на момент обращения. Но автор топика при всей своей внешней борьбе за "правильность", тесты, проверки параметров в коде и т.п. тем не менее выбрал наиболее кривое решение, чтобы не трогать имеющееся легаси и создать сложноподдерживаемый велосипед для следующих поколений.
...
Рейтинг: 0 / 0
Параметризованная внешняя таблица
    #40000338
НеофитSQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем привет.

Мой другой вопрос про UNION ALL к этой задаче совсем не относился, поэтому извините если все смешалось.

У меня синхронный запрос который достает с интернета ценные 100 байт "прямо сейчас" по кнопке пользователя.
Я пользуюсь DBMS scheduler в других местах (например, для импорта и автоматической обработки асинхронных данных, или ночной проверки данных БД по параметрам, где существующие механизмы целостности не помогают).

Кстати про DBMS scheduler - где лучше посмотреть объяснение как исполнение джобов соотносится с сессиями?
Например, если три джоба исполняются одновременно, они будут находиться в разных сессиях Оракла?

> Задача ТС в принципе не должна решаться со стороны БД, если требуется состояние ответа сервиса на момент обращения.

Насколько я знаю, такие задачи обычно решаются в application server, который сидит между БД и клиентом.

Я внесу скромное предложение, что когда кто-то что-то хорошо знает и уже пишет ответ, вместо "так никто не делает" он/она конструктивно что-то предложит, например "в классической архитектуре систем БД, общение с веб сервисами делается на уровне application server".

Такой кусочек знаний будет полезен не только ТС, но и другим.
...
Рейтинг: 0 / 0
Параметризованная внешняя таблица
    #40000350
Фотография env
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
НеофитSQL
У меня синхронный запрос который достает с интернета ценные 100 байт "прямо сейчас" по кнопке пользователя.

Для этого использование СУБД не требуется от слова совсем.

НеофитSQL
если три джоба исполняются одновременно, они будут находиться в разных сессиях Оракла?

да

НеофитSQL
Я внесу скромное предложение, что когда кто-то что-то хорошо знает и уже пишет ответ,

Он сам решает, что достаточно написать и не обязан разжёвывать это тому, кто не не желает понимать нелепости своего решения.
...
Рейтинг: 0 / 0
19 сообщений из 19, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Параметризованная внешняя таблица
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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