Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 Insert в поле типа xmltype  [new]
Ольга Семенова
Member

Откуда:
Сообщений: 651
Всем привет.

Использую функцию xmltype

Подскажите как при вставке проверять значение на NULL
т.к. при инсерте NULL-значения получаю ошибку ORA-19032: Expected XML tag , got no content

INSERT INTO Table (VALUEXML) VALUES  (xmltype('<?xml version="1.0"?> <greeting>Hello, world!</greeting>'))

так все вставляет корректно
29 ноя 18, 19:21    [21749030]     Ответить | Цитировать Сообщить модератору
 Re: Insert в поле типа xmltype  [new]
Ольга Семенова
Member

Откуда:
Сообщений: 651
поле VALUEXML имеет тип xmltype
29 ноя 18, 19:22    [21749031]     Ответить | Цитировать Сообщить модератору
 Re: Insert в поле типа xmltype  [new]
Ольга Семенова
Member

Откуда:
Сообщений: 651
и можно ли как-то NULL конвертировать в формат xmltype ?
29 ноя 18, 19:25    [21749034]     Ответить | Цитировать Сообщить модератору
 Re: Insert в поле типа xmltype  [new]
dmdmdm
Member

Откуда: Нижний Новгород
Сообщений: 1116
Предоставьте нормальный test case.

+
Connected to Oracle Database 12c Standard Edition Release 12.2.0.1.0 
Connected as user1@//DM/TEST

SQL> create table t1( x xmltype );

Table created

SQL> INSERT INTO t1 VALUES (xmltype('<?xml version="1.0"?> <greeting>Hello, world!</greeting>'));

1 row inserted

SQL> INSERT INTO t1 VALUES (null);

1 row inserted

SQL> commit;

Commit complete

SQL> select rowid, t1.x from t1;

ROWID                                                                            X
-------------------------------------------------------------------------------- --------------------------------------------------------------------------------
AAAST4AAHAAAAodAAA                                                               <?xml version="1.0"?>
                                                                                 <greeting>Hello, world!</greeting>
AAAST4AAHAAAAodAAB                                                               

SQL> 
29 ноя 18, 19:32    [21749041]     Ответить | Цитировать Сообщить модератору
 Re: Insert в поле типа xmltype  [new]
Ольга Семенова
Member

Откуда:
Сообщений: 651
dmdmdm, дело в том что скрипт гененирует стороннее приложение

INSERT INTO Table (Field1, Field2, VALUEXML) VALUES (@a, @b, xmltype(сюда_передается_значения_из_поля_типа_xmltype))


и когда туда поступает NULL в качестве аргумента. то получаю ошибку ORA-19032: Expected XML tag , got no content
29 ноя 18, 19:41    [21749052]     Ответить | Цитировать Сообщить модератору
 Re: Insert в поле типа xmltype  [new]
Ольга Семенова
Member

Откуда:
Сообщений: 651
чтобы если передается в функцию xmltype(NULL), то оно бы так и вставляло его NULLом, а если текст то обрабатывала и тоже вставляла
29 ноя 18, 19:45    [21749054]     Ответить | Цитировать Сообщить модератору
 Re: Insert в поле типа xmltype  [new]
dmdmdm
Member

Откуда: Нижний Новгород
Сообщений: 1116
Все еще нет test case.

Connected to Oracle Database 12c Standard Edition Release 12.2.0.1.0 
Connected as user1@//DM/TEST

SQL> create table t1( x xmltype );

Table created


SQL> INSERT INTO t1 VALUES (xmltype(NULL));

1 row inserted


SQL> 
29 ноя 18, 19:53    [21749059]     Ответить | Цитировать Сообщить модератору
 Re: Insert в поле типа xmltype  [new]
Ольга Семенова
Member

Откуда:
Сообщений: 651
INSERT INTO Table_1 (Field1, Field2, VALUEXML)
SELECT Field1, Field2, XMLTYPE(VALUEXML) FROM Table_2;
29 ноя 18, 19:58    [21749066]     Ответить | Цитировать Сообщить модератору
 Re: Insert в поле типа xmltype  [new]
Ольга Семенова
Member

Откуда:
Сообщений: 651
INSERT INTO Table_1 (Field1, Field2, VALUEXML) 
SELECT Field1, Field2, XMLTYPE(VALUEXML) FROM Table_2;


и вот тут селект дает как нормальные значения, которые функция конвертирует. А если попадает NULL то вылетает с ошибкой
29 ноя 18, 20:00    [21749069]     Ответить | Цитировать Сообщить модератору
 Re: Insert в поле типа xmltype  [new]
Ольга Семенова
Member

Откуда:
Сообщений: 651
SQL> INSERT INTO t1 VALUES (xmltype(NULL));


а у меня если как у вас вставляю вместо аргумента NULL получаю

SQL Error: ORA-06553: PLS-307: слишком много описаний 'XMLTYPE' соответствуют этому вызову
06553. 00000 - "PLS-%s: %s"
29 ноя 18, 20:05    [21749078]     Ответить | Цитировать Сообщить модератору
 Re: Insert в поле типа xmltype  [new]
dmdmdm
Member

Откуда: Нижний Новгород
Сообщений: 1116
ORA-06553: PLS-307


Наконец хоть что-то внятное.
И вы с этим сходили в Гугл и что-то почитали?
29 ноя 18, 20:33    [21749097]     Ответить | Цитировать Сообщить модератору
 Re: Insert в поле типа xmltype  [new]
-2-
Member

Откуда:
Сообщений: 14079
Ольга Семенова
ORA-19032: Expected XML tag , got no content
Это приложение вместо биндов использует пустой литерал ''.
29 ноя 18, 20:55    [21749099]     Ответить | Цитировать Сообщить модератору
 Re: Insert в поле типа xmltype  [new]
Ольга Семенова
Member

Откуда:
Сообщений: 651
dmdmdm
ORA-06553: PLS-307


Наконец хоть что-то внятное.
И вы с этим сходили в Гугл и что-то почитали?


попробовала
INSERT INTO Table (VALUEXML) VALUES  (xmltype(TO_CHAR(NULL))


ORA-19032: Ожидался тэг XML ,; обнаружен no content
ORA-06512: на "SYS.XMLTYPE", line 310
29 ноя 18, 21:29    [21749120]     Ответить | Цитировать Сообщить модератору
 Re: Insert в поле типа xmltype  [new]
SY
Member

Откуда: Middlebury, CT USA
Сообщений: 9219
Ольга Семенова,

Bерсию огласи.

SY.
30 ноя 18, 00:51    [21749267]     Ответить | Цитировать Сообщить модератору
 Re: Insert в поле типа xmltype  [new]
Stax
Member

Откуда: Ukraine,Lviv
Сообщений: 1413
Ольга Семенова,

мож у вас "пробельчик" передается, а не null?
SQL> insert into stax_xml values(1,xmltype(trim(' ')))
  2  /
insert into stax_xml values(1,xmltype(trim(' ')))
                              *
ERROR at line 1:
ORA-19032: Expected XML tag , got no content
ORA-06512: at "SYS.XMLTYPE", line 310
ORA-06512: at line 1

SQL> insert into stax_xml values(1,xmltype(null));

1 row created.

SQL>

.....
stax
30 ноя 18, 09:41    [21749429]     Ответить | Цитировать Сообщить модератору
 Re: Insert в поле типа xmltype  [new]
env
Member

Откуда: Россия, Москва
Сообщений: 5907
Ольга Семенова,

0. Какая версия оракла
1. Каким типом биндуется параметр на стороне приложения
2. trim
30 ноя 18, 09:43    [21749433]     Ответить | Цитировать Сообщить модератору
 Re: Insert в поле типа xmltype  [new]
env
Member

Откуда: Россия, Москва
Сообщений: 5907
C trim погорячился
30 ноя 18, 10:01    [21749471]     Ответить | Цитировать Сообщить модератору
 Re: Insert в поле типа xmltype  [new]
--Eugene--
Member

Откуда: Боярышник
Сообщений: 2075
Ольга Семенова,

зацените:
with src as (select to_char(null) value from dual)
select xmltype(value) from src

with src as (select to_char(null) value from dual)
select case when value is not null then xmltype(value) end from src
30 ноя 18, 14:13    [21749993]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить