Oracle11g 软件包是如何工作的?
我创建了一个包含两个过程的包,其中一个是创建用户。然而,当我执行这个过程时,虽然成功了,但我没有看到用户被创建Oracle11g 软件包是如何工作的?,oracle11g,package,Oracle11g,Package,我创建了一个包含两个过程的包,其中一个是创建用户。然而,当我执行这个过程时,虽然成功了,但我没有看到用户被创建 create or replace PACKAGE APPLICATIONPACKAGE AS procedure CreateSingleUser( userName in VARCHAR2, rolename in VARCHAR2); PROCEDURE DeleteUser(userName in varchar2); END APPLICAT
create or replace PACKAGE APPLICATIONPACKAGE AS
procedure CreateSingleUser( userName in VARCHAR2, rolename in VARCHAR2);
PROCEDURE DeleteUser(userName in varchar2);
END APPLICATIONPACKAGE;
/
create or replace PACKAGE BODY
APPLICATIONPACKAGE AS
procedure CreateSingleUser( userName in VARCHAR2, rolename in VARCHAR2)
AS
dynamicsql VARCHAR2 (2000);
BEGIN
BEGIN
if rolename='APPADMIN' OR rolename='APPMODIFIER' or rolename='APPVIEWER'
THEN --limit user input to specific roles
----assign dynamic sql to a variable for excecution by excecute immediate
dynamicsql :='CREATE USER ' || userName|| ' IDENTIFIED BY pass1234 DEFAULT
TABLESPACE USERS QUOTA 1M ON USERS PASSWORD EXPIRE';
DBMS_OUTPUT.PUT_LINE (dynamicsql);
EXECUTE IMMEDIATE dynamicsql;
EXECUTE IMMEDIATE 'GRANT ' || rolename || ' TO ' || userName || '';
EXECUTE IMMEDIATE 'GRANT CREATE SESSION TO ' || userName;
else
DBMS_OUTPUT.PUT_LINE('Not a valid role...sorry role specified not given to
a user');
END IF;
END;
END CreateSingleUser;
PROCEDURE DeleteUser(userName in varchar2)
AS
deleteSql VARCHAR2 (500);
BEGIN
deleteSql :='DROP USER ' || userName; -- assign drop user command to
variable delete sql
DBMS_OUTPUT.PUT_LINE (deleteSql);
EXECUTE IMMEDIATE deleteSql; -- excecute the sql dynamically;
END DeleteUser;
----- end procedure delete user-------
END APPLICATIONPACKAGE;
我像applicationpackage.createsingleuser('John','appadmin')一样执行;字符串比较区分大小写。如果传递小写字符串“appadmin”并将其与大写字符串“appadmin”进行比较,则该比较将不会成功。我的猜测是,如果你的
语句的计算结果为false,那么你没有启用dbms\u输出
,你也看不到dbms\u输出。从你的其他
中放入行
(一个原因是你不应该依赖任何人看到写入dbms\u输出的输出
)。