Reputation: 185
I have a procedure which using execute immediate changes a user password. If password is correct it passes a result (new password with some additional text) to OUT parameter .
The point is how to pass an error (like below) which is a result of password verify function to OUT parameter:
ORA-28003: password verification for the specified password failed
ORA-20004: Password should contain at least one digit, one character and one
punctuation
would you give me some hint/example ?
Below a code of my procedure:
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;
/
Upvotes: 0
Views: 2721
Reputation: 31726
You cannot specify size for an out variable varchar2(300)
during procedure compilation.
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;
/
Now, You can call the procedure and display the error message.
DECLARE
vResult varchar2(400);
BEGIN
SYSChangePassword (pUsername=>'HR',pNewPassword=> 'hr',pResult=>vResult );
DBMS_OUTPUT.PUT_LINE(vResult);
END;
/
Upvotes: 1
Reputation: 3689
Somehing like:
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;
/
Upvotes: 0