Новые сообщения [новые:0]
Дайджест
Горячие темы
Избранное [новые:0]
Форумы
Пользователи
Статистика
Статистика нагрузки
Мод. лог
Поиск
|
14.11.2017, 10:23
|
|||
---|---|---|---|
|
|||
Commit при вызове процедуры через oracle dblink |
|||
#18+
Коллеги, подскажите, пожалуйста. Не фиксируются данные при вызове процедуры postgresql через oracle dblink 1) Создал простейшую процедуру в БД postgresql CREATE OR REPLACE FUNCTION public.test_insert(i_id integer) RETURNS integer LANGUAGE plpgsql AS $function$ DECLARE begin insert into tts.test_ora_db(id) values(i_id); return i_id; EXCEPTION WHEN others THEN RAISE WARNING 'err.create_user_account.Others State: % Errm: %', sqlstate, sqlerrm; return sqlerrm; END; $function$ 2) В БД Oracle создал процедуру для возможности вызова через DBlink процедур postgresql с входными параметрами CREATE OR REPLACE FUNCTION Call_Postgre_n(v_Func VARCHAR2) RETURN NUMBER IS v_Cursor BINARY_INTEGER; v_Nr BINARY_INTEGER; v_Ret NUMBER; BEGIN v_Cursor := Dbms_Hs_Passthrough.Open_Cursor@Pgsql; Dbms_Hs_Passthrough.Parse@Pgsql(v_Cursor, 'select ' || v_Func); v_Nr := Dbms_Hs_Passthrough.Fetch_Row@Pgsql(v_Cursor); Dbms_Hs_Passthrough.Get_Value@Pgsql(v_Cursor, 1, v_Ret); Dbms_Hs_Passthrough.Close_Cursor@Pgsql(v_Cursor); RETURN v_Ret; END; 3) Совершаю вызов select Call_Postgre_n('public.test_insert(10)') as rez from dual Вернуло 10 4) Снова в postgresql select * from tts.test_ora_db; Пусто!!! Как же так? Прочитал кучу топиков, где пишут, что явно commit писать не требуется, до и не позволяется это в процедуре postgresql. ... |
|||
:
Нравится:
Не нравится:
|
|||
|
14.11.2017, 10:31
|
|||
---|---|---|---|
Commit при вызове процедуры через oracle dblink |
|||
#18+
Hamstervill, а если после select * from tts.test_ora_db; сделать commit ? ... |
|||
:
Нравится:
Не нравится:
|
|||
|
14.11.2017, 10:41
|
|||
---|---|---|---|
|
|||
Commit при вызове процедуры через oracle dblink |
|||
#18+
ыудусе, попробовал, не помогает ... |
|||
:
Нравится:
Не нравится:
|
|||
|
14.11.2017, 13:58
|
|||
---|---|---|---|
|
|||
Commit при вызове процедуры через oracle dblink |
|||
#18+
Чуток отформатировал, бо невозможно читать HamstervillКоллеги, подскажите, пожалуйста. Не фиксируются данные при вызове процедуры postgresql через oracle dblink 1) Создал простейшую процедуру в БД postgresql Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17.
2) В БД Oracle создал процедуру для возможности вызова через DBlink процедур postgresql с входными параметрами Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16.
3) Совершаю вызов Код: sql 1.
Вернуло 10 4) Снова в postgresql Код: sql 1.
Пусто!!! Как же так? Прочитал кучу топиков, где пишут, что явно commit писать не требуется, до и не позволяется это в процедуре postgresql. Тестирую без oracle процедуры Код: 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. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66.
Попробуй убрать exception может по русски выругается? ... |
|||
:
Нравится:
Не нравится:
|
|||
|
14.11.2017, 16:32
|
|||
---|---|---|---|
|
|||
Commit при вызове процедуры через oracle dblink |
|||
#18+
Vadim Lejnin, спасибо за проведенный анализ. Разобрался в чем дело, оказывается oracle неявно дописывает BEGIN в начало вызова, таким образом, на вход в postgresql поступает команда: BEGIN;select public.test_insert(10) Нужно вызвать вот так: select Call_Postgre_n('public.test_insert(10); commit;') as rez from dual И все работает! ... |
|||
:
Нравится:
Не нравится:
|
|||
|
|
start [/forum/topic.php?fid=53&mobile=1&tid=1996110]: |
0ms |
get settings: |
8ms |
get forum list: |
18ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
30ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
51ms |
get tp. blocked users: |
1ms |
others: | 17ms |
total: | 142ms |
0 / 0 |