|
|
|
FireDac array insert
|
|||
|---|---|---|---|
|
#18+
Добрый день. Исходные данные: - Postgres - Delphi Berlin В Postgres написана тестовая функция (возвращающая void) вида: Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. Необходимо из Delphi, вызвать функцию testproc в анонимном блоке с множественной вставкой. В компоненте TFDQuery записан вызов функции в анонимном блоке: Код: plsql 1. 2. 3. Сам вызов вставки 10 записей: Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. Компонент TFDQuery не определяет мой параметр :par по не известным мне причинам. Как быть??? Как мне вызвать множественную вставку в анонимном блоке на сервере??? Вариант с явным запросом для вставки типа Insert into не предлагать, т.к. в самой функции "testproc" есть своя бизнес логика. Всех с наступающим Новым Годом!!!!!!1 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.12.2018, 15:04 |
|
||
|
FireDac array insert
|
|||
|---|---|---|---|
|
#18+
dimka07, Что означает "не определяет" ? В чем выражается? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.12.2018, 15:09 |
|
||
|
FireDac array insert
|
|||
|---|---|---|---|
|
#18+
В редакторе компонента TFDQuery на вкладке Parameters параметр :par просто не определен, его там просто нет ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.12.2018, 15:12 |
|
||
|
FireDac array insert
|
|||
|---|---|---|---|
|
#18+
dimka07, А тебе оно надо? в редакторе? В коде, перед присвоением значений Params.Count чему равно? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.12.2018, 15:17 |
|
||
|
FireDac array insert
|
|||
|---|---|---|---|
|
#18+
dimka07, А если на инсерт с тем же параметром перепмсать, то не нулю? Ну дела, тут без Арефьева не разобраться. Но ты бы не маскировал суть проблемы использованием пакетной вставки, проверь/добейся воспроизведения на одном одиночном инсерте вообще без циклов и массивов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.12.2018, 15:29 |
|
||
|
FireDac array insert
|
|||
|---|---|---|---|
|
#18+
Также могу создавать этот параметр динамически Код: 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. 33. В этом случае количество параметров равно 1, но при выполнении запроса появляется ошибка: Ошибка синтаксиса (примерное положение: ":") ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.12.2018, 15:30 |
|
||
|
FireDac array insert
|
|||
|---|---|---|---|
|
#18+
dimka07, Ты можешь "раздеть" пример, оставив ровно одну вставку с одним параметром без циклов и массивов? И как он будет выполняться, если присвоение значения параметру закомментировать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.12.2018, 15:44 |
|
||
|
FireDac array insert
|
|||
|---|---|---|---|
|
#18+
с простым запросом на вставку работает Код: plsql 1. 2. 3. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.12.2018, 15:51 |
|
||
|
FireDac array insert
|
|||
|---|---|---|---|
|
#18+
https://www.postgresql.org/docs/9/sql-do.html: авторThe code block is treated as though it were the body of a function with no parameters , returning void. It is parsed and executed a single time. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.12.2018, 17:22 |
|
||
|
FireDac array insert
|
|||
|---|---|---|---|
|
#18+
Dmitry Arefiev, Дмитрий, когда мы использовали Oracle, то с помощью FireDac, мы спокойно использовали анонимные блоки и выполняли вставку в массиве. Может быть Вы подскажете в этом случае обходной путь для Postgres с использованием firedac??? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.12.2018, 17:36 |
|
||
|
FireDac array insert
|
|||
|---|---|---|---|
|
#18+
Dmitry Arefiev, Дмитрий, когда мы использовали Oracle, то с помощью FireDac, мы спокойно использовали анонимные блоки и выполняли вставку в массиве. Может быть Вы подскажете в этом случае обходной путь для Postgres с использованием firedac??? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.12.2018, 17:40 |
|
||
|
FireDac array insert
|
|||
|---|---|---|---|
|
#18+
А зачем там вообще анонимный блок, который содержит единственный вызов функции ? Либо вызывать эту функцию, либо напрямую вызывать INSERT. Последнее лучше, с точки зрения производительности. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.12.2018, 17:52 |
|
||
|
FireDac array insert
|
|||
|---|---|---|---|
|
#18+
На клиенте кэшируются в словарь значения для вставки в БД, в порядке от 100 до 5000 записей. По требованию клиента - событию, эти данные должны вставиться в БД Postgres. Из Вашего примера со студией Array DML, операция Insert работает очень производительно. Но в моей случае мне нужно вызвать функцию в БД для вставки. В теле функции перед самой вставкой есть определенная бизнес-логика, так что напрямую вызвать Insert я не могу. Вот у меня и возник вопрос, как вызвать функцию из Базы для вставки. Через FDStoredProc параметр определяется: Код: pascal 1. 2. 3. 4. 5. 6. 7. Но в данном случае, получается не производительно, т.к. 10000 раз будет вызвана функция. Через FDQuery параметр :par вообще не определяется: Код: plsql 1. 2. 3. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.12.2018, 20:48 |
|
||
|
FireDac array insert
|
|||
|---|---|---|---|
|
#18+
dimka07, Ты не ответил (возможно я пропустил) на самое главное, - если с тем же текстом запроса пытаться послать одну параметризированную запись без использования институтов Array DML, ошибка проявляется или нет? Если да, то, имхо, это надо однозначно оформлять как багу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.12.2018, 21:10 |
|
||
|
FireDac array insert
|
|||
|---|---|---|---|
|
#18+
С точки зрения Oracle я вызывал функцию из пакета в анонимном блоке, через FDQuery: Код: plsql 1. 2. 3. и сам код на Delphi: Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. и все эти команды единым пакетом вызывались на сервере, что дает производительность. 10 000 записей вставилось за 2 секунды, с удаленного компьютера. А с точки зрения PG у меня такое не получается ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.12.2018, 21:13 |
|
||
|
FireDac array insert
|
|||
|---|---|---|---|
|
#18+
Vlad F, проявляется ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.12.2018, 21:14 |
|
||
|
FireDac array insert
|
|||
|---|---|---|---|
|
#18+
dimka07Vlad F, проявляется Оформляйте однозначно, голосую.)) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.12.2018, 21:23 |
|
||
|
FireDac array insert
|
|||
|---|---|---|---|
|
#18+
Но только безо всякого упоминания FireDAC Array DML. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.12.2018, 21:34 |
|
||
|
FireDac array insert
|
|||
|---|---|---|---|
|
#18+
Не надо мешать анонимные блоки и прочь из разных БД. Что в одной радость, то в другой может быть боль. PL/SQL блоки сильно другое по природе в отличии от PgSQL блоков. Кроме общего слова - мало общего. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.12.2018, 21:48 |
|
||
|
FireDac array insert
|
|||
|---|---|---|---|
|
#18+
Дмитрий, насколько я понимаю решения в данном вопросе нет, кроме как прямой вставкой через insert???? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.12.2018, 21:50 |
|
||
|
FireDac array insert
|
|||
|---|---|---|---|
|
#18+
Отец-основатель в пятницу вечером, однозначно, стоит того чтобы к нему прислушаться.)) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.12.2018, 21:52 |
|
||
|
FireDac array insert
|
|||
|---|---|---|---|
|
#18+
Прямой INSERT - лучшая производительность. Функция - делай что хочешь внутри. Но это будет элемент за элементом. Временная таблица - Array DML в таблицу, потом функция это перелопачивает. ХЗ ... может FireDAC заведется от массива и засунет его в функцию ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.12.2018, 21:54 |
|
||
|
FireDac array insert
|
|||
|---|---|---|---|
|
#18+
Vlad F, Если же это действительно бага, то ее решения (исправления бага) ждать долго, следующей версии RAD :) А нам надо сдавать проект до Нового года, вот поэтому и спрашиваю у основателя и других форумчан обходное решение данной проблемы. P.S. С Oracle на PG считай весь функционал решения считай перевели, кроме этого момента, к большому сожалению, и если не успеем, то по шапке в качестве подарка к НГ очень сильно влетит. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.12.2018, 21:58 |
|
||
|
|

start [/forum/topic.php?fid=58&msg=39748195&tid=2040001]: |
0ms |
get settings: |
10ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
159ms |
get topic data: |
9ms |
get forum data: |
3ms |
get page messages: |
63ms |
get tp. blocked users: |
1ms |
| others: | 216ms |
| total: | 482ms |

| 0 / 0 |
