1

次の手順:

create or replace
PROCEDURE ChangePassword
(
    p_Name      VARCHAR2,
    p_Password  VARCHAR2
)
AS
  EXECUTE IMMEDIATE 'ALTER USER :a IDENTIFIED BY :b' USING p_Name, p_Password;
END;

コンパイルは成功しますが、実行すると:

exec ChangePassword('TestUser', 'newPassword');

エラーになります:

01935. 00000 -  "missing user or role name"
*Cause:    A user or role name was expected.
*Action:   Specify a user or role name.

なんで?

4

2 に答える 2

5

このステートメントのユーザー名などの識別子の代わりにバインド変数を使用することはできません。識別子の値はステートメントの解析時に知る必要がありますが、バインド値は解析後、実行前に組み込まれます。

于 2012-04-25T12:10:18.647 に答える
4

私は次のことがうまくいくと思います

create or replace PROCEDURE ChangePassword(p_Name         IN VARCHAR2,
                                           p_Old_password IN VARCHAR2,
                                           p_New_password IN VARCHAR2)
AS
  EXECUTE IMMEDIATE 'ALTER USER ' || p_name ||
                    ' IDENTIFIED BY ' || p_New_password ||
                    ' REPLACE ' || p_Old_password;
END;

共有してお楽しみください。

于 2012-04-25T12:13:26.743 に答える