Очевидно, что один из трех вызовов функций до truncate
делает то, о чем вы нам не говорите:
perform ssv('HTTPS', 'on');
perform ssv('SERVER_NAME', 'www.url.domain');
perform ssv('DAD', 'website');
Редактировать: аудит кода
При ближайшем рассмотрении выявляется немало проблем:
В заголовке вы называете функцию schema.table1()
(что является странным названием для функции), внизу вы ссылаетесь на schema.export_doc()
?
У вас есть ключевое слово DECLARE
дважды в заголовке функции. Вам нужно это только один раз. К моему удивлению, это не вызывает ошибку, хотя.
Если \n
в
'<?xml version="1.0" encoding="UTF-8"?>\n<XMLDoc format="XMLDOC-XML"%'
предполагается интерпретировать как разрыв строки, тогда вы должны использовать правильный синтаксис для escape-констант :
E'<?xml version="1.0" encoding="UTF-8"?>\n<XMLDoc format="XMLDOC-XML"%'
Вы вызываете функцию schema.doc2XMLDOC(var, '1')
дальше вниз. В смешанной записи? Вам известно, что идентификаторы приводятся к нижнему регистру , если не заключены в двойные кавычки в PostgreSQL? Я никогда не использую идентификаторы регистров миксов.
Блок исключений выглядит подозрительно. Почему вызываемая функция выдает ошибку?
begin
...
exception when others then
s_doc:=NULL;
end;
Существует количество тестов, которые вы можете запустить на своих данных , чтобы предотвратить это:
xml IS DOCUMENT
XMLEXISTS(...)
xml_is_well_formed()
Более чистая и, скорее всего, более быстрая, чем (медленная) обработка ошибок.