|
|
|
Работа с NestedTable
|
|||
|---|---|---|---|
|
#18+
Добрый день всем гуру! Есть такая проблема. Нужно с клиента Delphi (Embarcadero 10.1 Berlin) передать в БД (Oracle 18c) через компоненты ODAC (версия 10.3.9) таблицу с данными. Покопавшись на просторах сети решил использовать компонент TOraNestedTable. На сервере создал два типа: Код: plsql 1. 2. 3. 4. 5. 6. Первый тип полностью соответствует структуре таблицы CLREE, в которую нужно будет вносить передаваемые данные. Данные заношу так: Код: pascal 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. Суть проблемы в том, что при вызове LNestTable.Post значения всех столбцов превращается в Null. После LNestTable.Append ставил LNestTable.Edit, но сути это не поменяло. Посему вопрос: как мне записать данные в LNestTable? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.10.2019, 10:49 |
|
||
|
Работа с NestedTable
|
|||
|---|---|---|---|
|
#18+
Nested table is a dataset component that encapsulates a database table that is nested as a field within another table. Use TOraNestedTable to access data contained in a nested dataset. A nested table provides much of the functionality of a table component, with the difference that the data it accesses is stored in a nested table. Даже гугло перевод и то говорит, что компонент не подходит для этого: Вложенная таблица - это компонент набора данных, который инкапсулирует таблицу базы данных, которая вложена как поле в другую таблицу. Используйте TOraNestedTable для доступа к данным, содержащимся во вложенном наборе данных. Вложенная таблица обеспечивает большую часть функциональности компонента таблицы, с той разницей, что данные, к которым она обращается, хранятся во вложенной таблице. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.10.2019, 11:35 |
|
||
|
Работа с NestedTable
|
|||
|---|---|---|---|
|
#18+
И по мелочи: Append и Post должны быть внутри цикла, а не за его пределами. Но ошибка тут не в этом. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.10.2019, 11:36 |
|
||
|
Работа с NestedTable
|
|||
|---|---|---|---|
|
#18+
еще по мелочи Код: pascal 1. должно быть ДО Код: pascal 1. а не после ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.10.2019, 11:37 |
|
||
|
Работа с NestedTable
|
|||
|---|---|---|---|
|
#18+
wadmanИ по мелочи: Append и Post должны быть внутри цикла, а не за его пределами. Но ошибка тут не в этом. Они и так внутри ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.10.2019, 11:57 |
|
||
|
Работа с NestedTable
|
|||
|---|---|---|---|
|
#18+
Если копать глубже, то мне надо из текстового файла перенести данные в таблицу. Логичнее всего было использовать TOraLoader. Для примера я его и использовал.Работал шустро, 43 ГБ залил всего за 2.5 часа. Но проблема в том, что я не могу дать пользователю права на запись непосредственно в таблицу. Вот и приходится извращаться. Как вариант хотел передать таблицей как параметр процедуры, благо TOraStoredProc позволяет это. А так как параметр должен быть TOraNestTable, то и возникла мысль использовать TOraNestedTable ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.10.2019, 12:04 |
|
||
|
Работа с NestedTable
|
|||
|---|---|---|---|
|
#18+
Леонов ЮрийwadmanИ по мелочи: Append и Post должны быть внутри цикла, а не за его пределами. Но ошибка тут не в этом. Они и так внутри Я увидел в приведенном коде иное. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.10.2019, 12:04 |
|
||
|
Работа с NestedTable
|
|||
|---|---|---|---|
|
#18+
Леонов ЮрийНо проблема в том, что я не могу дать пользователю права на запись непосредственно в таблицу. Вот и приходится извращаться. Есть еще один способ: залить во временную таблицу (без индексов заливка будет еще быстрее) и затем дернуть оракловую процедуру, которая из временной раскидает записи как угодно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.10.2019, 12:06 |
|
||
|
Работа с NestedTable
|
|||
|---|---|---|---|
|
#18+
wadmanЕсть еще один способ: залить во временную таблицу (без индексов заливка будет еще быстрее) и затем дернуть оракловую процедуру, которая из временной раскидает записи как угодно. Эта мысль была реализована, но опять таки всё упирается в права доступа. Создавать заранее таблицу нельзя, потому как потом придется бороться с параллельной заливкой. Если создавать по ходу выполнения закачки, то как выдать права на созданную таблицу от владельца? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.10.2019, 13:19 |
|
||
|
Работа с NestedTable
|
|||
|---|---|---|---|
|
#18+
wadmanЯ увидел в приведенном коде иное. Интересно, что именно? Между Append и Post есть только цикл, в котором по полям ОДНОЙ ЗАПИСИ разносятся данные. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.10.2019, 13:21 |
|
||
|
Работа с NestedTable
|
|||
|---|---|---|---|
|
#18+
Леонов ЮрийСоздавать заранее таблицу нельзя, потому как потом придется бороться с параллельной заливкой. С чего бы вдруг? Временные таблицы разных сессий никак не взаимодействуют. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.10.2019, 13:28 |
|
||
|
Работа с NestedTable
|
|||
|---|---|---|---|
|
#18+
Dimitry SibiryakovС чего бы вдруг? Временные таблицы разных сессий никак не взаимодействуют. Есть 2 пользователя БД. Один владелец схемы (назовем его OWN_USER), второй - пользователь, который пользуется приложением (путь будет ARM_USER). ARM_USER вызывает пакетную процедуру, в которой происходит создание временной таблицы, со схемы OWN_USER. Временная таблица создается от OWN_USER. Её будет видеть ARM_USER? Нет, потому что надо дать на нее права. Насколько я помню, права не выдаются моментально, нужно открыть новую сессию. Для АРМа это не подходит. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.10.2019, 14:14 |
|
||
|
Работа с NestedTable
|
|||
|---|---|---|---|
|
#18+
Леонов ЮрийARM_USER вызывает пакетную процедуру, в которой происходит создание временной таблицы "Уже смешно." (с) Не надо так делать. Динамические метаданные - путь в никуда. Создай таблицу один раз и потом используй её. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.10.2019, 14:19 |
|
||
|
Работа с NestedTable
|
|||
|---|---|---|---|
|
#18+
Леонов ЮрийИнтересно, что именно? Что цикл в коде только один, а append и post - за его пределами. Леонов ЮрийЕсть 2 пользователя БД. Один владелец схемы (назовем его OWN_USER), второй - пользователь, который пользуется приложением (путь будет ARM_USER). Это легко разруливается. Быстрее сделать, чем ждать ответы и рассуждать, почему нельзя. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.10.2019, 14:36 |
|
||
|
Работа с NestedTable
|
|||
|---|---|---|---|
|
#18+
Dimitry Sibiryakov, Дело в том, что политика заказчика не позволяет писать данные прямо в таблицу. Только через пакеты. Все таблицы обернуты вьюшками и права только на select ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.10.2019, 14:37 |
|
||
|
Работа с NestedTable
|
|||
|---|---|---|---|
|
#18+
Леонов ЮрийDimitry Sibiryakov, Дело в том, что политика заказчика не позволяет писать данные прямо в таблицу. Только через пакеты. Все таблицы обернуты вьюшками и права только на select ну сделай пакет, который будет использоваться для записи в таблицу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.10.2019, 14:56 |
|
||
|
Работа с NestedTable
|
|||
|---|---|---|---|
|
#18+
Леонов Юрий, А если добавить в пакет процедуру, которая будет добавлять 1 строчку в NESTED TABLE? Если хотите, можно даже готовым объектом REE_REC передавать. Если нет, то отдельными полями. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.10.2019, 15:00 |
|
||
|
Работа с NestedTable
|
|||
|---|---|---|---|
|
#18+
defecator, Ну так а я о чем?! Суть проблемы описал, но свели в никуда своими комментариями. Я же с того и начал, что использую TOraNestedTable для передачи данных в пакетную процедуру, в которой и состоится запись всех данных в таблицу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.10.2019, 15:01 |
|
||
|
Работа с NestedTable
|
|||
|---|---|---|---|
|
#18+
Кроик Семён Леонов Юрий, А если добавить в пакет процедуру, которая будет добавлять 1 строчку в NESTED TABLE? Если хотите, можно даже готовым объектом REE_REC передавать. Если нет, то отдельными полями. Ну, 70 миллионов записей будет довольно таки долго добавляться. Смысл был передавать блоками по 2-5 тысяч строк и вставка вида Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.10.2019, 15:06 |
|
||
|
Работа с NestedTable
|
|||
|---|---|---|---|
|
#18+
Леонов Юрий, здесь иногда отвечают программисты из Devart. Может сегодня уже :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.10.2019, 15:57 |
|
||
|
Работа с NestedTable
|
|||
|---|---|---|---|
|
#18+
Кроик Семён Леонов Юрий, здесь иногда отвечают программисты из Devart. Может сегодня уже :) Да, я знаю. Очень сильно помогают, кстати. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.10.2019, 16:46 |
|
||
|
Работа с NestedTable
|
|||
|---|---|---|---|
|
#18+
Леонов ЮрийЯ же с того и начал, что использую TOraNestedTable для передачи данных в пакетную процедуру Тут нужен не nested table, а table variable. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.10.2019, 17:52 |
|
||
|
Работа с NestedTable
|
|||
|---|---|---|---|
|
#18+
Dimitry SibiryakovТут нужен не nested table, а table variable. Ну если точнее то TOraArray. TOraNestTable как раз наследник его ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.10.2019, 19:00 |
|
||
|
Работа с NestedTable
|
|||
|---|---|---|---|
|
#18+
Леонов ЮрийНу если точнее то TOraArray. TOraNestTable как раз наследник егоВот и используй TOraArray как параметр TOraStoredProc. Для каких тебе удобств эта обёртка-то..? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.10.2019, 19:42 |
|
||
|
Работа с NestedTable
|
|||
|---|---|---|---|
|
#18+
ma1tusЛеонов ЮрийНу если точнее то TOraArray. TOraNestTable как раз наследник егоВот и используй TOraArray как параметр TOraStoredProc. Для каких тебе удобств эта обёртка-то..? Тут походу тупик. Я использую Direct подключение, и мне бьет ошибку "OCI function is not linked". Почитал на форуме Devart, там пишут, что "Такие типы как OBJECT, ARRAY, REF, XML, BINARY_DOUBLE, BINARY_FLOAT не поддерживаются в Direct режиме. " ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.10.2019, 11:05 |
|
||
|
|

start [/forum/topic.php?fid=58&fpage=58&tid=2038875]: |
0ms |
get settings: |
8ms |
get forum list: |
30ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
33ms |
get topic data: |
6ms |
get forum data: |
2ms |
get page messages: |
37ms |
get tp. blocked users: |
1ms |
| others: | 233ms |
| total: | 356ms |

| 0 / 0 |
