Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 DBMS_HS_PASSTHROUGH и триггер  [new]
serg_luk
Member

Откуда:
Сообщений: 65
Есть функция
FUNCTION update_command
   (
        command_id IN NUMBER, status IN NUMBER
   )
   RETURN  INTEGER
   IS
    PRAGMA AUTONOMOUS_TRANSACTION;
    result INTEGER;
    sql_str VARCHAR2(2000);
    c INTEGER;
   BEGIN
        sql_str :=  'UPDATE command ' ||
                    'SET command_status_id = ' || CAST (status AS VARCHAR2) || ', ' ||
                    'WHERE command_id = ' ||  CAST (command_id AS VARCHAR2) || ' ' ||
                        'AND command_status_id < ' || CAST (status AS VARCHAR2);

        c := DBMS_HS_PASSTHROUGH.OPEN_CURSOR@DBLINK;
        DBMS_HS_PASSTHROUGH.PARSE@DBLINK(c,sql_str);
        result := DBMS_HS_PASSTHROUGH.EXECUTE_NON_QUERY@DBLINK(c);
        DBMS_HS_PASSTHROUGH.CLOSE_CURSOR@DBLINK(c);
        COMMIT;
        RETURN result;
   END;

Если выполнять функцию вне триггера ошибок нет, как только делаю вызов из триггера выдается ошибка:
[OLE/DB provider returned message: ORA-28500: ?????????? ORACLE ? ??????????? ???????? ?????? ?????????:
[Transparent gateway for MSSQL]

А если не делать в автономной транзакции, то вылетает ошибка, что не может присоединиться к распределенной транзакции.
27 сен 06, 19:28    [3193098]     Ответить | Цитировать Сообщить модератору
 Re: DBMS_HS_PASSTHROUGH и триггер  [new]
serg_luk
Member

Откуда:
Сообщений: 65
Там не все лишние данные постирал
sql_str :=  'UPDATE command ' ||
                    'SET command_status_id = ' || CAST (status AS VARCHAR2) || ' ' ||
                    'WHERE command_id = ' ||  CAST (command_id AS VARCHAR2) || ' ' ||
                        'AND command_status_id < ' || CAST (status AS VARCHAR2);

запятую удалить забыл :)
27 сен 06, 19:30    [3193100]     Ответить | Цитировать Сообщить модератору
 Re: DBMS_HS_PASSTHROUGH и триггер  [new]
Partos
Member

Откуда:
Сообщений: 878
ORA-28500 connection from ORACLE to a non-Oracle system returned this message:

Cause: The cause is explained in the forwarded message.

Action: See the non-Oracle system's documentation of the forwarded message.
27 сен 06, 20:33    [3193282]     Ответить | Цитировать Сообщить модератору
 Re: DBMS_HS_PASSTHROUGH и триггер  [new]
serg_luk
Member

Откуда:
Сообщений: 65
не совсем понятен ответ конечно, ну возвращает MSSQL ошибку а почему, ведь если вне триггера, то есть не в транзакции выполнять все ок, все обновляется и возвращается результат.
28 сен 06, 09:18    [3194273]     Ответить | Цитировать Сообщить модератору
 Re: DBMS_HS_PASSTHROUGH и триггер  [new]
serg_luk
Member

Откуда:
Сообщений: 65
Вопрос снят, ошибку нашел в коде. Все нормально работает.
28 сен 06, 10:21    [3194653]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить