Запрос UPDATE без предложения WHERE работает нормально. Но когда я использую предложение WHERE, он показывает ошибку
ORA-28536: ошибка в обработке параметров инициализации гетерогенных сервисов
ORA-28507: ошибка в представлении словаря данных sys.hs $ _class_init
ORA-02063: предшествующие 2 строки из MYSQL_ATULSSO
ORA-00604: ошибка на рекурсивном уровне SQL 1
ORA-02067: требуется откат транзакции или резервной копии
ORA-00604: ошибка на рекурсивном уровне SQL 1
ORA-02067: требуется откат транзакции или сохранения точки.
Мой код:
DECLARE
A NUMBER(15) := 70;
B NUMBER(15) := 69;
BEGIN
UPDATE ATL1_SSO_ACCESS_REQ_DETAILS A SET A.REQ_ID = B;
DBMS_OUTPUT.PUT_LINE('done11');
UPDATE ATL1_SSO_ACCESS_REQ_DETAILS A SET A.REQ_ID = B WHERE A.REQ_ID = A;
COMMIT;
DBMS_OUTPUT.PUT_LINE('done');
EXCEPTION
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE('not done1');
COMMIT;
END;
Результат: done1 не сделано
Я получил ответ. Вы можете обновить из базы данных Link. Ниже синтаксис
UPDATE "*DB_NAME*"."*TABLE_NAME*"@"*DB_LINK*"
SET "*DB_NAME*"."*TABLE_NAME*"."*COLUMN_NAME*"@"*DB_LINK*"= 'r2'
WHERE "*DB_NAME*"."*TABLE_NAME*"."*COLUMN_NAME*"@"*DB_LINK*"='r1';
пример:
UPDATE "atul_sso"."ATL_SSO_ACCESS_REQ_DETAILS"@"mysql_atulsso.atul.co.in"
SET "atul_sso"."ATL_SSO_ACCESS_REQ_DETAILS"."REQ_TYPE"@"mysql_atulsso.atul.co.in"= 'r2'
WHERE "atul_sso"."ATL_SSO_ACCESS_REQ_DETAILS"."REQ_TYPE"@"mysql_atulsso.atul.co.in"='r1';
У меня все еще есть еще одно сомнение. Я не могу обновить с помощью синонима. есть ли синтаксис для этого?
Я думаю, что использование псевдонима таблицы A в месте, где может возникнуть проблема. Попробуйте приведенный ниже код
DECLARE
A NUMBER(15) := 70;
B NUMBER(15) := 69;
BEGIN
UPDATE ATL1_SSO_ACCESS_REQ_DETAILS A SET
A.REQ_ID = B;
DBMS_OUTPUT.PUT_LINE('done11');
UPDATE ATL1_SSO_ACCESS_REQ_DETAILS A SET
A.REQ_ID = B WHERE A.REQ_ID = 70;
DBMS_OUTPUT.PUT_LINE('done');
EXCEPTION
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE('not done1');
END;
sys.hs$_class_init
???