|
Хранимая процедура
|
|||
---|---|---|---|
#18+
Здравствуйте, в БД "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 ? ... |
|||
:
Нравится:
Не нравится:
|
|||
16.03.2018, 13:34 |
|
Хранимая процедура
|
|||
---|---|---|---|
#18+
Ролг Хупин, правильно ли я делаю? Если переделывать пример записать данные в два столбца базы, то: 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 не существует, (хотя такая таблица была создана и заполнена) ... |
|||
:
Нравится:
Не нравится:
|
|||
23.03.2018, 11:25 |
|
Хранимая процедура
|
|||
---|---|---|---|
#18+
term_lv, если она у вас реально Tom а не tom то название надо в двойные кавычки брать в запросе insert into "Tom" по умолчанию без кавычек названия в low case приводятся. -- Maxim Boguk лучшая поддержка PostgreSQL: dataegret.ru ... |
|||
:
Нравится:
Не нравится:
|
|||
24.03.2018, 02:56 |
|
Хранимая процедура
|
|||
---|---|---|---|
#18+
Maxim Boguk, Спасибо, все работает. Ещё вопрос, можно ли при вызове функции указать место расположения xml-файла? а не его внутреннюю структуру как в примере? ... |
|||
:
Нравится:
Не нравится:
|
|||
25.03.2018, 09:41 |
|
Хранимая процедура
|
|||
---|---|---|---|
#18+
Ребят подскажите пожалуйста, как изменить данную функцию, 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 файла? ... |
|||
:
Нравится:
Не нравится:
|
|||
31.03.2018, 09:22 |
|
|
start [/forum/topic.php?fid=53&fpage=57&tid=1995862]: |
0ms |
get settings: |
10ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
28ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
44ms |
get tp. blocked users: |
1ms |
others: | 281ms |
total: | 396ms |
0 / 0 |