Обновление таблицы MySQL из PL SQL ошибка ORA-28536: ошибка в обработке параметров инициализации гетерогенных служб

0

Запрос 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 не сделано

  • 0
    Итак, вы используете гетерогенные службы (для подключения к базе данных MySQL?)? Является ли ATL1_SSO_ACCESS_REQ_DETAILS таблицей в удаленной базе данных? Вы проверили установку представления словаря данных sys.hs$_class_init ???
  • 0
    ATL1_SSO_ACCESS_REQ_DETAILS - это синоним, созданный в Oracle. CREATE SYNONYM "ATL1_SSO_ACCESS_REQ_DETAILS" FOR "atl_sso". "ATL_SSO_ACCESS_REQ_DETAILS" @ "MYSQL_ATULSSO.ATUL.CO.IN"; Я понятия не имею о разнородных услугах. SELECT * FROM sys.hs $ _class_init; этот запрос ничего не возвращает.
Показать ещё 5 комментариев
Теги:
heterogeneous-services

2 ответа

0
Лучший ответ

Я получил ответ. Вы можете обновить из базы данных 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';

У меня все еще есть еще одно сомнение. Я не могу обновить с помощью синонима. есть ли синтаксис для этого?

0

Я думаю, что использование псевдонима таблицы 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;
  • 0
    Никакой алиас не вызывает проблем. Я пытался без псевдонимов также. Я испробовал почти все возможные способы, использовал '(одинарная кавычка), "(двойная кавычка),` (обратный тик).

Ещё вопросы

Сообщество Overcoder
Наверх
Меню