Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Как переписать это с Оракла на Постгрес?
|
|||
|---|---|---|---|
|
#18+
create or replace function() .... .... exception when others then rollback; end; ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.02.2007, 15:02 |
|
||
|
Как переписать это с Оракла на Постгрес?
|
|||
|---|---|---|---|
|
#18+
aloshacreate or replace function() .... .... exception when others then rollback; end; ЙО! Может таки доку почитать? Там все прикольно описано. В том числе и как с Оракла мигрировать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.02.2007, 15:05 |
|
||
|
Как переписать это с Оракла на Постгрес?
|
|||
|---|---|---|---|
|
#18+
Andrey Daeron aloshacreate or replace function() .... .... exception when others then rollback; end; ЙО! Может таки доку почитать? Там все прикольно описано. В том числе и как с Оракла мигрировать. не могу найти такого, может кто знает, как это переделать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2007, 07:14 |
|
||
|
Как переписать это с Оракла на Постгрес?
|
|||
|---|---|---|---|
|
#18+
alosha Andrey Daeron aloshacreate or replace function() .... .... exception when others then rollback; end; ЙО! Может таки доку почитать? Там все прикольно описано. В том числе и как с Оракла мигрировать. не могу найти такого, может кто знает, как это переделать? Тогда вопрос - а чего собсно хочется, или что не устравивает в доке? Чего непонятного-то? До раздела 37.11.2.1. Implicit Rollback after Exceptions дочитали? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2007, 13:13 |
|
||
|
Как переписать это с Оракла на Постгрес?
|
|||
|---|---|---|---|
|
#18+
Andrey Daeron alosha Andrey Daeron aloshacreate or replace function() .... .... exception when others then rollback; end; ЙО! Может таки доку почитать? Там все прикольно описано. В том числе и как с Оракла мигрировать. не могу найти такого, может кто знает, как это переделать? Тогда вопрос - а чего собсно хочется, или что не устравивает в доке? Чего непонятного-то? До раздела 37.11.2.1. Implicit Rollback after Exceptions дочитали? Вот функция: create or replace function clearDistributedQueries( pCREATION_DATE_TO numeric(19) ) returns void as $BODY$ begin delete from QUERY_RESULT where DISTRIBUTED_QUERY_ID in (select ID from DISTRIBUTED_QUERY where CREATION_DATE <= pCREATION_DATE_TO); delete from DISTRIBUTED_QUERY where CREATION_DATE <= pCREATION_DATE_TO; --exception --when others then rollback; end;$BODY$ LANGUAGE 'plpgsql'; Надо по-другому переписать exception-блок, потому что так пишется в Оракле и я не знаю, как это правильно написать в Постгресе. Напишите правильно, пожалуйста. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2007, 15:18 |
|
||
|
Как переписать это с Оракла на Постгрес?
|
|||
|---|---|---|---|
|
#18+
alosha Вот функция: create or replace function clearDistributedQueries( pCREATION_DATE_TO numeric(19) ) returns void as $BODY$ begin delete from QUERY_RESULT where DISTRIBUTED_QUERY_ID in (select ID from DISTRIBUTED_QUERY where CREATION_DATE <= pCREATION_DATE_TO); delete from DISTRIBUTED_QUERY where CREATION_DATE <= pCREATION_DATE_TO; --exception --when others then rollback; end;$BODY$ LANGUAGE 'plpgsql'; Надо по-другому переписать exception-блок, потому что так пишется в Оракле и я не знаю, как это правильно написать в Постгресе. Напишите правильно, пожалуйста. Naskolko ia ponial konstruktsiu 'exception when others' Oracla, v dannom konkretnom sluchae v Postgrese ee mojete prosto vykinut', tak kak PG i tak bez etoi konstruktsii otkatit tranzactsiu pri vozniknovenii oshibki. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2007, 15:41 |
|
||
|
Как переписать это с Оракла на Постгрес?
|
|||
|---|---|---|---|
|
#18+
2alosha как я понимаю, вы программировали под оракл? прочитайте внимательно 37.11.2.1. Implicit Rollback after Exceptions как советовал Andrey Daeron в кратце, в вашем случае "some actual thought will be required" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2007, 16:15 |
|
||
|
Как переписать это с Оракла на Постгрес?
|
|||
|---|---|---|---|
|
#18+
alosha Вот функция: create or replace function clearDistributedQueries( pCREATION_DATE_TO numeric(19) ) returns void as $BODY$ begin delete from QUERY_RESULT where DISTRIBUTED_QUERY_ID in (select ID from DISTRIBUTED_QUERY where CREATION_DATE <= pCREATION_DATE_TO); delete from DISTRIBUTED_QUERY where CREATION_DATE <= pCREATION_DATE_TO; --exception --when others then rollback; end;$BODY$ LANGUAGE 'plpgsql'; Надо по-другому переписать exception-блок, потому что так пишется в Оракле и я не знаю, как это правильно написать в Постгресе. Напишите правильно, пожалуйста. Ну дык. Если верить доке - то все УЖЕ написано правильно. Ибо по любому other произойдет роллбек. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2007, 17:10 |
|
||
|
Как переписать это с Оракла на Постгрес?
|
|||
|---|---|---|---|
|
#18+
Andrey Daeronрить доке - то все УЖЕ написано правильно. Ибо по любому other произойдет роллбек. не все, откатиться только изменения с момента начала функции, сама транзакция останется висеть. Т.е. надо чтото придумать, что б по ошибке в функции, откатить всю транзакцию. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2007, 17:22 |
|
||
|
Как переписать это с Оракла на Постгрес?
|
|||
|---|---|---|---|
|
#18+
st_serg Andrey Daeronрить доке - то все УЖЕ написано правильно. Ибо по любому other произойдет роллбек. не все, откатиться только изменения с момента начала функции, сама транзакция останется висеть. Т.е. надо чтото придумать, что б по ошибке в функции, откатить всю транзакцию. Если я правильно курю эту доку, то вот это Код: plaintext 1. 2. 3. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2007, 17:53 |
|
||
|
Как переписать это с Оракла на Постгрес?
|
|||
|---|---|---|---|
|
#18+
как вы сами видите, что б транзакция откатилась необходимо исключение, при этом "current transaction is aborted, commands ignored until end of transaction block " если мы в функции пишем when other then null; то у нас происходит "In PL/pgSQL, when an exception is caught by an EXCEPTION clause, all database changes since the block's BEGIN are automatically rolled back" в приведенном автором куске кода, функция в случае непредвиденной ошибки, просто откатывает всю транзакцию назад, не матюкаясь. последующие команды будут восприниматься вполне нормально (неявно начнеться новая транзакция). В пг придется явно завершить сломанную транзакцию, а затем начать новую. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2007, 18:07 |
|
||
|
Как переписать это с Оракла на Постгрес?
|
|||
|---|---|---|---|
|
#18+
Код: plaintext 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2007, 18:18 |
|
||
|
Как переписать это с Оракла на Постгрес?
|
|||
|---|---|---|---|
|
#18+
alosha Надо по-другому переписать exception-блок, потому что так пишется в Оракле и я не знаю, как это правильно написать в Постгресе. Напишите правильно, пожалуйста. автор36.7.5. Trapping Errors By default, any error occurring in a PL/pgSQL function aborts execution of the function, and indeed of the surrounding transaction as well. You can trap errors and recover from them by using a BEGIN block with an EXCEPTION clause. The syntax is an extension of the normal syntax for a BEGIN block: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. If no error occurs, this form of block simply executes all the statements, and then control passes to the next statement after END. But if an error occurs within the statements, further processing of the statements is abandoned, and control passes to the EXCEPTION list. The list is searched for the first condition matching the error that occurred. If a match is found, the corresponding handler_statements are executed, and then control passes to the next statement after END. If no match is found, the error propagates out as though the EXCEPTION clause were not there at all: the error can be caught by an enclosing block with EXCEPTION, or if there is none it aborts processing of the function. The condition names can be any of those shown in Appendix A, PostgreSQL Error Codes. A category name matches any error within its category. The special condition name OTHERS matches every error type except QUERY_CANCELED. (It is possible, but often unwise, to trap QUERY_CANCELED by name.) Condition names are not case-sensitive.блин, ну надо ж быть таким ленивым... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2007, 18:26 |
|
||
|
Как переписать это с Оракла на Постгрес?
|
|||
|---|---|---|---|
|
#18+
не поможет это ему... pl/pgSQL не умеет управлять ходом транзакции, pl/sql умеет ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2007, 18:31 |
|
||
|
Как переписать это с Оракла на Постгрес?
|
|||
|---|---|---|---|
|
#18+
автор where CREATION_DATE <= pCREATION_DATE_TO; --exception --when others then rollback; st_sergкак вы сами видите, что б транзакция откатилась необходимо исключение, при этом "current transaction is aborted, commands ignored until end of transaction block " если мы в функции пишем when other then null; то у нас происходит "In PL/pgSQL, when an exception is caught by an EXCEPTION clause, all database changes since the block's BEGIN are automatically rolled back" в приведенном автором куске кода, функция в случае непредвиденной ошибки, просто откатывает всю транзакцию назад, не матюкаясь. последующие команды будут восприниматься вполне нормально (неявно начнеться новая транзакция). В пг придется явно завершить сломанную транзакцию, а затем начать новую. Неа, не начнется - будут порождаться ерроры, которые, по крайней мере в теории, и обвалят транзакцию уже в клиенте (т.е. клиент "догадается" что произошла какая-то нездоровая весчщь). У него-ж перехват exception закоментен, в отличии от Вашего когда ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2007, 18:42 |
|
||
|
Как переписать это с Оракла на Постгрес?
|
|||
|---|---|---|---|
|
#18+
Код: plaintext 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. кстати, в оракле изменения в функции не откатываются до начала функции, как это происходит в пг ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2007, 18:52 |
|
||
|
Как переписать это с Оракла на Постгрес?
|
|||
|---|---|---|---|
|
#18+
насчет закоменченного куска, автор пишет "Надо по-другому переписать exception-блок, потому что так пишется в Оракле и я не знаю, как это правильно написать в Постгресе. Напишите правильно, пожалуйста." ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2007, 18:53 |
|
||
|
Как переписать это с Оракла на Постгрес?
|
|||
|---|---|---|---|
|
#18+
еще один маленький test-case pg Код: plaintext 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. oracle Код: plaintext 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2007, 19:14 |
|
||
|
Как переписать это с Оракла на Постгрес?
|
|||
|---|---|---|---|
|
#18+
я лишь хочу сказать, что exception в оракле отваливает либо весь программный блок, либо отдельный оператор, не трогая транзакцию в целом в пг, в случае exception отваливается вся транзакция, причем, чтобы продолжить работу, ее надо явно завершить. Для автора сабжа это означает 37.11.2.1. Implicit Rollback after Exceptions ... If you have a procedure that uses SAVEPOINT and ROLLBACK TO in a different way then some actual thought will be required. имхо, нужно выносить все управление транзакциями на клиента. Кусок оракловского кода Код: plaintext 1. 2. 3. 4. 5. 6. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2007, 19:46 |
|
||
|
Как переписать это с Оракла на Постгрес?
|
|||
|---|---|---|---|
|
#18+
гм, извиняюсь, по поводу "вся транзакция" я погорячился, если использовать savepoint'ы то Код: plaintext 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2007, 20:23 |
|
||
|
|

start [/forum/topic.php?fid=53&msg=34342176&tid=2005682]: |
0ms |
get settings: |
9ms |
get forum list: |
22ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
137ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
61ms |
get tp. blocked users: |
1ms |
| others: | 257ms |
| total: | 507ms |

| 0 / 0 |
