|
Как проверить, что в поле - XML?
|
|||
---|---|---|---|
#18+
Народ, всем привет! И вроде простой вопрос, но найти ответ пока не смог. Может и плохо искал, конечно... Но всё же, как сделать так, чтобы данный запрос выполнился, вернув одну строку, с корректным XML? Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29.
В данном примере мы не проверяем соответствие структуры схеме XSD, а проверяем просто синтаксис. Т.е. нужно выбрать строки, которые может переварить xmltype(). Может быть есть какой-то простой способ для этого? ... |
|||
:
Нравится:
Не нравится:
|
|||
30.07.2021, 06:47 |
|
Как проверить, что в поле - XML?
|
|||
---|---|---|---|
#18+
123йй Synoptic, Transforming and Validating XMLType Data Спасибо, но это не то. XMLType.isSchemaValid проверяет уже корректный (синтаксически) XML на соответствие XSD-схеме. А мне нужно проверить, что в поле находится корректный XML, с корректным синтаксисом, без нескольких корней итд. Это немного другая задача. Можно конечно запилить функцию, которая будет строку передавать в XMLType() и обрабатывать исключения, но какой-то это кривой способ, наверняка есть что-то штатное для этого. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.07.2021, 09:21 |
|
Как проверить, что в поле - XML?
|
|||
---|---|---|---|
#18+
Synoptic 123йй Synoptic, Transforming and Validating XMLType Data Спасибо, но это не то. XMLType.isSchemaValid проверяет уже корректный (синтаксически) XML на соответствие XSD-схеме. А мне нужно проверить, что в поле находится корректный XML, с корректным синтаксисом, без нескольких корней итд. Это немного другая задача. Можно конечно запилить функцию, которая будет строку передавать в XMLType() и обрабатывать исключения, но какой-то это кривой способ, наверняка есть что-то штатное для этого. Стандартной не нашел. to_number c DEFAULT ON CONVERSION ERROR появилась только в 12.2, для xmltype ожидать этого не стоит. Может когда и добавят ... |
|||
:
Нравится:
Не нравится:
|
|||
30.07.2021, 09:44 |
|
Как проверить, что в поле - XML?
|
|||
---|---|---|---|
#18+
Алымов Анатолий Стандартной не нашел. to_number c DEFAULT ON CONVERSION ERROR появилась только в 12.2, для xmltype ожидать этого не стоит. Может когда и добавят Ну вот да. Была ещё мыль про VALIDATE_CONVERSION, но она не понимает xmltype ... |
|||
:
Нравится:
Не нравится:
|
|||
30.07.2021, 10:56 |
|
Как проверить, что в поле - XML?
|
|||
---|---|---|---|
#18+
Synoptic В данном примере мы не проверяем соответствие структуры схеме XSD, а проверяем просто синтаксис. Т.е. нужно выбрать строки, которые может переварить xmltype(). Может быть есть какой-то простой способ для этого? И что мешает написать функцию: Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64.
SY. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.07.2021, 13:35 |
|
Как проверить, что в поле - XML?
|
|||
---|---|---|---|
#18+
Если xml-ка большая, можно заюзать SAX ... |
|||
:
Нравится:
Не нравится:
|
|||
30.07.2021, 14:02 |
|
Как проверить, что в поле - XML?
|
|||
---|---|---|---|
#18+
del ... |
|||
:
Нравится:
Не нравится:
|
|||
30.07.2021, 14:13 |
|
Как проверить, что в поле - XML?
|
|||
---|---|---|---|
#18+
SY И что мешает написать функцию Ничего, вопрос был про возможный штатный способ. Писал об этом: Synoptic Можно конечно запилить функцию, которая будет строку передавать в XMLType() и обрабатывать исключения, но какой-то это кривой способ, наверняка есть что-то штатное для этого. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.07.2021, 20:24 |
|
Как проверить, что в поле - XML?
|
|||
---|---|---|---|
#18+
Synoptic Ничего, вопрос был про возможный штатный способ. Писал об этом: Если это ETL то можно создать exceptions table и залить в таблицу через INSERT EXCEPTIONS INTO. SY. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.07.2021, 20:55 |
|
Как проверить, что в поле - XML?
|
|||
---|---|---|---|
#18+
SY Если это ETL то можно создать exceptions table и залить в таблицу через INSERT EXCEPTIONS INTO. SY. Не, это обработчик данных, который пишет в логи в виде XML, но временами вместо XML там оказывается какая-то дичь. В общем да, видимо проще всего через функцию. Всем, спасибо! Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43.
... |
|||
:
Нравится:
Не нравится:
|
|||
31.07.2021, 10:15 |
|
Как проверить, что в поле - XML?
|
|||
---|---|---|---|
#18+
Synoptic, Я бы из функции возвращал сам xmltype, чтобы дважды не конвертить. И null в случае exception. ... |
|||
:
Нравится:
Не нравится:
|
|||
31.07.2021, 10:18 |
|
Как проверить, что в поле - XML?
|
|||
---|---|---|---|
#18+
Разумно! ... |
|||
:
Нравится:
Не нравится:
|
|||
31.07.2021, 12:27 |
|
Как проверить, что в поле - XML?
|
|||
---|---|---|---|
#18+
. ... |
|||
:
Нравится:
Не нравится:
|
|||
31.07.2021, 18:49 |
|
Как проверить, что в поле - XML?
|
|||
---|---|---|---|
#18+
andrey_anonymous Synoptic, Я бы из функции возвращал сам xmltype, чтобы дважды не конвертить. И null в случае exception. Согласен. Кстати конвертится один раз, хотя на больших CLOB не факт и не факт deterministic поможет. Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74.
SY. ... |
|||
:
Нравится:
Не нравится:
|
|||
31.07.2021, 19:16 |
|
Как проверить, что в поле - XML?
|
|||
---|---|---|---|
#18+
SY andrey_anonymous Synoptic, Я бы из функции возвращал сам xmltype, чтобы дважды не конвертить. И null в случае exception. Согласен. Кстати конвертится один раз, хотя на больших CLOB не факт и не факт deterministic поможет. Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74.
SY. Андрей имел в виду, что дважды конвертится - это Код: plsql 1. 2. 3.
лучше одним запросом Код: plsql 1. 2.
, где функция сразу возвращает xml или null ... |
|||
:
Нравится:
Не нравится:
|
|||
01.08.2021, 10:03 |
|
Как проверить, что в поле - XML?
|
|||
---|---|---|---|
#18+
И никто так и не скажет, что у аффтара оба XML одинаково валидные/инвалидные с точки зрения спецификации?.. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
01.08.2021, 12:38 |
|
Как проверить, что в поле - XML?
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov И никто так и не скажет, что у аффтара оба XML одинаково валидные/инвалидные с точки зрения спецификации?.. XML с двумя корнями валидна? ... |
|||
:
Нравится:
Не нравится:
|
|||
03.08.2021, 13:02 |
|
Как проверить, что в поле - XML?
|
|||
---|---|---|---|
#18+
SynopticXML с двумя корнями валидна? Корень XML это тэг <xml>. Он отсутствует в обоих вариантах. Да, в этом случае там могут быть сколько угодно разных "корней". Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
03.08.2021, 13:06 |
|
Как проверить, что в поле - XML?
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov, хочешь сказать, что оракловый xmltype() работает некорректно? ... |
|||
:
Нравится:
Не нравится:
|
|||
03.08.2021, 18:54 |
|
Как проверить, что в поле - XML?
|
|||
---|---|---|---|
#18+
Да. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
03.08.2021, 19:05 |
|
Как проверить, что в поле - XML?
|
|||
---|---|---|---|
#18+
Synoptic Dimitry Sibiryakov, хочешь сказать, что оракловый xmltype() работает некорректно? Код: plsql 1. 2. 3. 4.
Однако в действительности это не просто XML document а single rooted XML document. Причем в SQL конструктор XMLTYPE не реагирует на параметр wellformed (Flag to indicate that the input is well formed. If set, then the database would not do well formed check on the input instance. Default is 0): Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19.
А в PL/SQL (когда уж Oracle перейдет к single engine): Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23.
Посему в таких как у тебя случаях лучше использовать XMLPARSE который принимает на вход как XML document так и content: Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33.
Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26.
SY. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.08.2021, 01:03 |
|
|
start [/forum/topic.php?fid=52&msg=40088340&tid=1879998]: |
0ms |
get settings: |
8ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
159ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
53ms |
get tp. blocked users: |
1ms |
others: | 230ms |
total: | 486ms |
0 / 0 |