通过dblink调用过程

时间:2017-08-01 08:56:19

标签: oracle plsql

下面的

是我的程序的来源。

CREATE OR REPLACE procedure SYS.ChangePassword(
  pUsername in varchar2, 
  pNewPassword in varchar2,
  pResult out varchar2)  as
  **pragma autonomous_transaction;**
begin
    insert into test_table values( to_date(sysdate), pUsername, pNewPassword);
    **commit;**
    execute immediate 'alter user '||pUsername||' identified by "'|| pNewPassword || '"';
    pResult := 'New password for '|| pUsername||' has been set:  '|| pNewPassword ;
exception
    WHEN OTHERS THEN
    pResult := SQLERRM;
end;

没什么特别的,它只是为用户设置了一个新密码。它按预期工作 - 返回有关新密码的信息

New password for TEST_user has been set:  XSW1!WDC1

或返回错误消息

ORA-28003: password verification for the specified password failed
ORA-20004: Password should contain at least one digit, one character and one punctuation

当然,它会在测试表中添加一条记录。

关键是如何使用dblink从其他数据库调用此过程。 当我以下面的方式这样做时:

DECLARE
   vResult varchar2(400);
BEGIN
   ChangePassword@db23('TEST_USER','XS21345W1!WDC1',vResult );
   commit;
   DBMS_OUTPUT.PUT_LINE(vResult);
END;

它不返回任何错误,但既没有添加新的记录到表,也没有关于成功/错误的消息。

解决方案:在程序的乞讨时添加编译指示“改变子程序在事务中的工作方式”。

0 个答案:

没有答案