0

当我跑步时

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;
/
4

3 回答 3

2
create or replace procedure deactivate_user 
(
p_username varchar2
)

您的程序需要输入(没有默认值,因此必须提供输入)。

SQL> exec deactivate_user

您需要传入您尝试停用的用户 ID。就像是。

SQL> exec deactivate_user('USER1');
于 2013-02-11T21:52:07.273 回答
0

此外:

create or replace procedure deactivate_user 
(
 p_username varchar2 DEFAULT 'USER1'
)
....

然后您不需要输入 p_username 的值。但默认情况下,您的过程将始终为 'USER1' 执行,除非您像 Rajesh 的示例中那样更改参数。

于 2013-02-11T22:10:50.450 回答
0

是的,您需要在根据您的代码调用存储过程时传递参数。

如下:

exec deactivate_user('USERname1');

但是,如果您不想传递任何输入值,则在调用 sp 时设置参数默认参数,那么它将采用自动默认值。

如下

create or replace procedure deactivate_user 
(
 p_username varchar2 DEFAULT 'USERname1'
)

.... 那么您不需要输入 p_username 的值。但默认情况下,除非您更改参数值,否则您的过程将始终为 'USERname1' 执行。

然后您将调用上述过程,例如:

exec deactivate_user;
于 2013-02-12T03:48:33.660 回答