Oracle pl/sql将异常传递给变量

Oracle pl/sql将异常传递给变量,oracle,plsql,Oracle,Plsql,我有一个使用executeimmediate更改用户密码的过程。如果密码正确,它将传递一个结果新密码以及一些额外的文本以输出参数。 关键是如何将密码验证功能导致的如下错误传递给OUT参数: ORA-28003: password verification for the specified password failed ORA-20004: Password should contain at least one digit, one character and one punctuation

我有一个使用executeimmediate更改用户密码的过程。如果密码正确,它将传递一个结果新密码以及一些额外的文本以输出参数。 关键是如何将密码验证功能导致的如下错误传递给OUT参数:

ORA-28003: password verification for the specified password failed
ORA-20004: Password should contain at least one digit, one character and one
punctuation
你能给我一些提示/例子吗

下面是我的程序代码:

CREATE OR REPLACE procedure SYS.SYSChangePassword(
  pUsername in varchar2, 
  pNewPassword in varchar2,
  pResult out varchar2(300))  as

begin
    execute immediate 'alter user '||pUsername||' identified by "' || pNewPassword || '";';
    pResult := 'New password for '|| pUsername||' has been set:  '|| pNewPassword ;
end;
/
比如:

CREATE OR REPLACE procedure SYS.SYSChangePassword(
  pUsername in varchar2, 
  pNewPassword in varchar2,
  pResult out varchar2(300))  as

begin
  execute immediate 'alter user '||pUsername||' identified by "' || pNewPassword || '";';
  pResult := 'New password for '|| pUsername||' has been set:  '|| pNewPassword ;
exception
  WHEN OTHERS THEN
    pResult := SQLERRM;
end;
/

在过程编译期间,不能为out变量varchar2300指定大小

CREATE OR REPLACE procedure SYSChangePassword(
  pUsername in varchar2, 
  pNewPassword in varchar2,
  pResult out varchar2 )  as

begin
    execute immediate 'alter user '||pUsername||' identified by "' || pNewPassword || '";';
    pResult := 'New password for '|| pUsername||' has been set:  ' || pNewPassword ;

    EXCEPTION
    WHEN OTHERS THEN
    pResult := SQLERRM;
end;
/
现在,您可以调用该过程并显示错误消息

DECLARE
vResult varchar2(400);
BEGIN
SYSChangePassword (pUsername=>'HR',pNewPassword=> 'hr',pResult=>vResult );

DBMS_OUTPUT.PUT_LINE(vResult);
END;
/

在Pl/SQL代码中使用异常块。这是一种根据代码中的某些逻辑引发特定异常的方法。如果你把你的代码放在这里,当其他人。。。。异常块,但对于那些特定的异常块,您需要声明一个自定义的\u异常;然后,如果满足某个条件,则引发custom_exception;。最后,在异常块中,您将有:EXCEPTION WHEN custom_EXCEPTION然后引发_application_error-20001,“you custom message goes here”;。我想我已经筋疲力尽了。@G00dy。为什么不把它写成anwser?@Rene-因为我需要看一个代码示例,然后才能确定这确实是一个答案。这就是为什么我要求提供代码样本,看看这是否是缺少的东西。或者该错误应该传递给OUT变量。。。如果没有代码,我无法给出相关的答案,我只是想这是缺少的。添加的代码…@Rene问题是我不想创建自定义消息,而是将密码验证函数生成的确切消息复制到变量中。