Гость
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Хранимая процедура / 6 сообщений из 6, страница 1 из 1
16.03.2018, 13:34
    #39615944
term_lv
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Хранимая процедура
Здравствуйте, в БД "Tg_db" есть заполненная таблица "Tom" и отдельный Xml-файл, структура которого приведена ниже и идентична таблице в БД.
<?xml version="1.0" encoding="UTF-8"?>
<Tg_db>
<Tom>
<ID> 00002 </D>
<Dev_n>T-4.0</Dev_n>
<Dev_t>X-Ray</Dev_t>
<Country> Russia</Country>
<Tom_desc>TOM_M_DESCR.doc</Tom_desc>
<Tom_model>TOM_M_DESCR.doc</Tom_model>
</Tom>
</Tg_db>

Подскажите пожалуйста, как реализовать хранимую процедуру в postgres, которая прочитает xml файл, и содержимое добавит в идентичные поля таблицы Tom ?
...
Рейтинг: 0 / 0
16.03.2018, 16:43
    #39616059
Ролг Хупин
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Хранимая процедура
...
Рейтинг: 0 / 0
23.03.2018, 11:25
    #39619353
term_lv
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Хранимая процедура
Ролг Хупин, правильно ли я делаю? Если переделывать пример записать данные в два столбца базы, то:


CREATE OR REPLACE FUNCTION insert_data(input_xml xml) RETURNS VOID AS
$$
DECLARE root_xpath TEXT = '/Root/StudentDetails/';
BEGIN
INSERT INTO Tom (ID, Dev_n)
SELECT ((xpath(root_xpath|| 'ID/text()', input_xml))[1])::text::int,
(xpath(root_xpath|| 'Dev_n/text()', input_xml))[1];
RETURN;
END;
$$
LANGUAGE plpgsql;

Процедура вызова:

SELECT insert_data('
<Root><StudentDetails>
<ID>00001</ID>
<Dev_n>X-ray</Dev_n>
</StudentDetails></Root>');

Ошибки: Отношение Tom не существует, (хотя такая таблица была создана и заполнена)
...
Рейтинг: 0 / 0
24.03.2018, 02:56
    #39619893
Maxim Boguk
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Хранимая процедура
term_lv,

если она у вас реально Tom а не tom то название надо в двойные кавычки брать в запросе insert into "Tom"
по умолчанию без кавычек названия в low case приводятся.


--
Maxim Boguk
лучшая поддержка PostgreSQL: dataegret.ru
...
Рейтинг: 0 / 0
25.03.2018, 09:41
    #39620077
term_lv
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Хранимая процедура
Maxim Boguk,

Спасибо, все работает. Ещё вопрос, можно ли при вызове функции указать место расположения xml-файла? а не его внутреннюю структуру как в примере?
...
Рейтинг: 0 / 0
31.03.2018, 09:22
    #39623651
term_lv
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Хранимая процедура
Ребят подскажите пожалуйста, как изменить данную функцию,

CREATE OR REPLACE FUNCTION insert_data(input_xml xml) RETURNS VOID AS
$$
DECLARE root_xpath TEXT = '/Root/StudentDetails/';
BEGIN
INSERT INTO Tom (ID, Dev_n)
SELECT ((xpath(root_xpath|| 'ID/text()', input_xml))[1])::text::int,
(xpath(root_xpath|| 'Dev_n/text()', input_xml))[1];
RETURN;
END;
$$
LANGUAGE plpgsql;

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


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