Аз съм сравнително нов в играта 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()
parameters.add
- Променливите на Oracle BIND изискват стойност на променлива BIND за всеки екземпляр. BIND променливите не са именувани -- едно и също име не означава, че стойността се използва във всеки екземпляр. - person OMG Ponies   schedule 17.03.2011