Не могу копировать в таблицу, указав не полный путь к файлу, а имя файла. В идеале мне нужно, чтоб было так:
CREATE OR REPLACE FUNCTION import(xml) returns varchar(12) as $$
DECLARE
u text;
str varchar(65);
BEGIN
SET xmloption TO CONTENT;
u:=XMLSERIALIZE (content $1 as text);
DELETE from "a";
IF ( xml_is_well_formed(u)=TRUE) THEN
copy "a"
from 'D:\\TestTask\\PersonsForm\\use.xml'
Delimiter as ';';
IF ((select trim(a.addition_code) from a)='1') THEN
IF ((select trim(a.name_for_print) from a)<>'') THEN
str:=(select '%'||(trim(a.name_for_print))||'%' from a);
DELETE from a;
INSERT INTO "a"
(code_user, first_name , name , last_name )
(select us.code_user , us.first_name , us.name , us.last_name
from users us
where lower(trim(us.first_name)||' '||trim(us.name)||' '||trim (us.last_name)) like lower(str));
ELSIF ((select trim(a.phone_num) from a)<>'') THEN
str:=(select '%'||replace((trim(a.phone_num)||'%'),' ','') from a);
DELETE from a;
INSERT INTO "a"
(code_user, first_name , name , last_name)
(select us.code_user , us.first_name , us.name , us.last_name
from users us,phone_numbers pn
where pn.user_insert=us.code_user
and pn.phone_num like str);
ELSE
INSERT INTO "a"
(code_user, first_name , name , last_name)
(select us.code_user , us.first_name , us.name , us.last_name
from users us);
END IF;
END IF;
copy (select table_to_xml('a', true, true, '')) to
'D:\\TestTask\\PersonsForm\\use.xml'
;
u:=xmlparse(content u);
END IF;
return str;
END
$$
LANGUAGE 'plpgsql';
А Вызов происходил из java программы так:
select import('use.xml');
Функция компилируется успешно, но при вызове выдается ошибка:
select select import('use.xml');
ERROR: could not open file "u" for reading: No such file or directory
CONTEXT: SQL statement "copy "a"(name_for_print) from E'use.xml'
Delimiter as ';'"
PL/pgSQL function " import" line 8 at SQL statement
Если написать from 'use.xml' ошибка таже.
Если написть from 'полный путь к файлу\use.xml', то работает.
Подскажите, как сделать?
Имя файла у вас в переменной
Имя файла у вас в переменной xml или в $1, при чём здесь 'u'?
Сорри, вставила не то.
Сорри, вставила не то. Исправила.
Вообще-то мне нужно считывать xml файл, но я не поняла как это делать, вернее я может и считываю xml, но его разбор как сделать незнаю. Поэтому в файле сначала хранится что, то типа ";;;;whit;;;1" Не подскажете?
имя файла у меня в $1 в формате xml. Ну или я полагаю, что так. Я новичек, а подсказать некому, поэтому делаю как разобралась. Не судите строго, 2 недели назад узнала о существовании PostgeSQL, поэтому пока сложновато вникнуть. Подскажите, что я не так понимаю?
Подскажем: По поводу работы
Подскажем:
По поводу работы команды COPY и формата файлов, которые нужны ей читайте тут:
http://postgresql.ru.net/manual/sql-copy.html
Вы всегда можете узнать, что у вас получилось, не запуская функцию целиком, а отработав только фрагмент, касаемый COPY
> вернее я может и считываю xml, но его разбор как сделать незнаю
Вот здесь перечислены все доступные в PostgreSQL функции для работы с XML. Если нужных вам нет, значит их нет.
http://postgresql.ru.net/manual/functions-xml.html