0

没有 WHERE 子句的 UPDATE 查询工作正常。但是当我使用 WHERE 子句时,它会显示错误

ORA-28536:处理异构服务初始化参数
时出错 ORA-28507:数据字典视图 sys.hs$_class_init 出错
ORA-02063: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 未完成

4

2 回答 2

0

我得到了答案。您可以从数据库链接更新。下面是语法

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';

我还有一个疑问。我无法使用 Synonym 进行更新。有什么语法吗?

于 2018-06-28T05:14:10.963 回答
0

我认为在 where 子句中使用表别名 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;
于 2018-06-18T15:39:51.123 回答