Oracle

А чи знаєте ви, що MS SQL Server не дозволяє виконувати в гетерогенних середовищах процедури навіть якщо драйвера дозволяють? Так, ми теж донедавна не представляли наявності такої проблеми. SQL Server просить повернення ResultSet, а процедура, як відомо, повернути значення, а тим більше вибірку, не може.
Увага, питання: як реалізувати виконання певної процедури на стороні оракла на вимогу сторони з MS SQL Server?
Індуський спосіб рідкісного милиці, який багато хто використовує:


  1. На стороні :

    1. Створюється таблиця (будь-яка).
    2. Створюється тригер на Insert / Update / Delete над цією таблицею.
    3. У тригері прописується виконання необхідної процедури.

  2. З боку MS SQL Server виконують DML-операцію над таблицею.
Спосіб розширюється обробкою в тригері значення поля, вірніше передачею його значення в EXECUTE IMMEDIATE. А взагалі це хрін знає що (на мій погляд).

Думки, рішення?

UPD: рішення, зроблене з підказки SergINI:

CREATE OR REPLACE FUNCTION test_dml(vSQL IN VARCHAR2)
RETURN VARCHAR2 AUTHID CURRENT_USER IS

PRAGMA AUTONOMOUS_TRANSACTION;
BEGIN
EXECUTE IMMEDIATE vSQL;
COMMIT;
RETURN(“SUCCESS”);
EXCEPTION
WHEN OTHERS THEN
RETURN(SQLERRM);
END;


Результат виконання DML-операції на тестовій таблиці:

SQL> SELECT test_dml(“update test_tab set col2=col2+1”) FROM dual;

TEST_DML(“UPDATETEST_TABSET
——————————————————————

Схожі статті:


Сподобалася стаття? Ви можете залишити відгук або підписатися на RSS , щоб автоматично отримувати інформацію про нові статтях.

Коментарів поки що немає.

Ваш отзыв

Поділ на параграфи відбувається автоматично, адреса електронної пошти ніколи не буде опублікований, допустимий HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

*