А знаете ли вы, что MS SQL Server не позволяет выполнять в гетерогенных средах процедуры даже если драйвера позволяют? Да, мы тоже до недавнего времени не представляли наличия такой проблемы. SQL Server просит возврата ResultSet, а процедура, как известно, вернуть значение, а тем более выборку, не может.
Внимание, вопрос: как реализовать выполнение определенной процедуры на стороне оракла по требованию стороны с MS SQL Server?
Индусский способ редкостного костыля, который многие используют:
- На стороне Oracle:
- Создается таблица (любая).
- Создается триггер на Insert/Update/Delete над этой таблицей.
- В триггере прописывается выполнение необходимой процедуры.
- Со стороны 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
------------------------------------------------------------------
Ссылки по теме