Oracle pl/sql将异常传递给变量
我有一个使用executeimmediate更改用户密码的过程。如果密码正确,它将传递一个结果新密码以及一些额外的文本以输出参数。 关键是如何将密码验证功能导致的如下错误传递给OUT参数: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
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问题是我不想创建自定义消息,而是将密码验证函数生成的确切消息复制到变量中。