私はPL/SQLゲームにかなり慣れていないので、ログインを作成し、読み取り専用/読み書き特権を付与する短いスクリプトを考え出そうとしています(必要に応じて必要な付与を行います)。ただし、変数のスコープの問題が発生しています。誰かが私が間違っているかもしれないことを助けてもらえますか?
切り取ったものは次のとおりです。
DECLARE CNT INTEGER;
BEGIN
SELECT COUNT(*)
INTO CNT
FROM dba_users
WHERE username = :ParamUserName
IF (CNT > 0) THEN
IF (INSTR(:ParamSelectedRole, 'WRITE') = 0) THEN
REVOKE UNLIMITED TABLESPACE FROM :ParamUserName;
REVOKE READ_WRITE FROM :ParamUserName;
GRANT READ_ONLY TO :ParamUserName;
ELSE
GRANT UNLIMITED TABLESPACE TO :ParamUserName;
END IF;
ELSE
CREATE USER :ParamUserName DEFAULT TABLESPACE USERS TEMPORARY TABLESPACE TEMP IDENTIFIED BY ":ParamUserPassword" PROFILE ELEV_USER;
ALTER USER :ParamUserName PASSWORD EXPIRE;
GRANT :ParamSelectedRole TO :ParamUserName;
GRANT CREATE SESSION TO :ParamUserName;
IF (INSTR(:ParamSelectedRole, 'WRITE') > 0 ) THEN
GRANT UNLIMITED TABLESPACE TO :ParamUserName;
END IF;
END IF;
END;
ODP.NET を使用して変数の割り当てを行い、OracleCommand.Parameters.Add()