Reputation: 63
when i run
SQL>execute deactivate_user
I get errors:
SQL> exec deactivate_user
BEGIN deactivate_user; END;
*
ERROR at line 1: ORA-06550: line 1, column 7: PLS-00306: wrong number or types of arguments in call to 'DEACTIVATE_USER' ORA-06550: line 1, column 7: PL/SQL: Statement ignored
Here is my code:
create or replace procedure deactivate_user
(
p_username varchar2
)
as
l_username varchar2(30):=upper(p_username);
cnmd varchar2(50);
begin
for rec in (select privilege, admin_option from dba_sys_privs
where grantee =l_username) loop
cnmd := 'REVOKE '||rec.privilege||' from '||l_username;
execute immediate cnmd;
end loop;
end;
/
Upvotes: 0
Views: 140
Reputation: 3777
yeah you need to pass the parameter while calling the store procedure as per your code.
as below:
exec deactivate_user('USERname1');
But if you dont want to pass any input value then set argument default parameter whenever you call sp then it will take automatic default value.
as below
create or replace procedure deactivate_user
(
p_username varchar2 DEFAULT 'USERname1'
)
.... Then you do not need to enter the value for p_username. But by default your procedure will always be executed for 'USERname1' unless you change the parameter value.
Then you will call the above procedure like:
exec deactivate_user;
Upvotes: 0
Reputation: 5782
In addition:
create or replace procedure deactivate_user
(
p_username varchar2 DEFAULT 'USER1'
)
....
Then you do not need to enter the value for p_username. But by default your procedure will always be executed for 'USER1' unless you change the parameter as in Rajesh's example.
Upvotes: 0
Reputation: 18808
create or replace procedure deactivate_user
(
p_username varchar2
)
your procedure is expecting an input (there is no default, so theinput must be provided).
SQL> exec deactivate_user
You need to pass in the userid that you are trying to deactivate. Something like.
SQL> exec deactivate_user('USER1');
Upvotes: 2