我跑的时候
SQL>execute deactivate_user
我收到错误:
SQL> exec deactivate_user
BEGIN deactivate_user; END;
*
第1行的错误: ORA-06550:第1行第7列: PLS-00306:调用'DEACTIVATE_USER'时参数的数量或类型错误 ORA-06550:第1行第7列: PL / SQL:忽略语句
这是我的代码:
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;
/
答案 0 :(得分:2)
create or replace procedure deactivate_user
(
p_username varchar2
)
您的程序期望输入(没有默认值,因此必须提供输入)。
SQL> exec deactivate_user
您需要传入您尝试停用的用户ID。像。的东西。
SQL> exec deactivate_user('USER1');
答案 1 :(得分:0)
另外:
create or replace procedure deactivate_user
(
p_username varchar2 DEFAULT 'USER1'
)
....
然后您不需要输入p_username的值。但默认情况下,除非您按照Rajesh的示例更改参数,否则将始终为“USER1”执行您的过程。
答案 2 :(得分:0)
是的,您需要在根据您的代码调用存储过程时传递参数。
如下:
exec deactivate_user('USERname1');
但是如果你不想传递任何输入值,那么只要你调用sp就设置参数默认参数,那么它将采用自动默认值。
如下
create or replace procedure deactivate_user
(
p_username varchar2 DEFAULT 'USERname1'
)
.... 然后,您无需输入p_username的值。但默认情况下,除非您更改参数值,否则将始终为“USERname1”执行过程。
然后你将调用上述程序,如:
exec deactivate_user;