powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Хранимая процедура
6 сообщений из 6, страница 1 из 1
Хранимая процедура
    #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
Хранимая процедура
    #39616059
Ролг Хупин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Хранимая процедура
    #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
Хранимая процедура
    #39619893
Фотография Maxim Boguk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
term_lv,

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


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

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


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