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の値を入力する必要はありません。ただし、デフォルトでは、Rajeshの例のようにパラメータを変更しない限り、プロシージャは常に「USER1」に対して実行されます。

于 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 に答える