生产库上的函数是正确的,如下:
CREATE OR REPLACE FUNCTION GET_RESULT( V_CORPID IN VARCHAR2, V_SHEET_NO IN VARCHAR2, V_PRO_CODE IN VARCHAR2, N_QUANTITY IN NUMBER, V_ACTION IN VARCHAR2 )
RETURN VARCHAR2
IS
RESULT VARCHAR2( 500 );
V_USERNAME VARCHAR2( 20 );
V_OSUSER VARCHAR2( 20 );
V_MACHINE VARCHAR2( 100 );
V_PROGRAM VARCHAR2( 100 );
BEGIN
BEGIN
SELECT
USERNAME, OSUSER, MACHINE, PROGRAM
INTO V_USERNAME, V_OSUSER, V_MACHINE, V_PROGRAM
FROM SYS.V_$SESSION
WHERE AUDSID = SYS_CONTEXT( 'USERENV', 'SESSIONID' );
RESULT := V_USERNAME || ' ' || V_OSUSER || ' ' || V_MACHINE || ' ' || V_PROGRAM;
END;
INSERT
INTO STORAGED_ERROR
( CORPID, SHEET_NO, PRO_CODE, QUANTITY, SYS_DATE, MEMO, ACTION )
VALUES( V_CORPID, V_SHEET_NO, V_PRO_CODE, N_QUANTITY, SYSDATE, RESULT, V_ACTION );
RETURN ( 'Y' );
END GET_RESULT;
/
可是用IMP导入到新的10G数据库后,报编译错误:
FUNCTION NUMEN.GET_RESULT 编译错误
错误:PL/SQL: ORA-00942: table or view does not exist
行:14
SELECT
USERNAME, OSUSER, MACHINE, PROGRAM
INTO V_USERNAME, V_OSUSER, V_MACHINE, V_PROGRAM
FROM SYS.V_$SESSION
文本:FROM SYS.V_$SESSION
错误:PL/SQL: SQL Statement ignored
行:11
文本:SELECT
看样子是权限问题,可是我这个用户是DBA的权限.在命令行也能查询SYS.V_$SESSION的数据.
我想会不会是因为数据字典的一些表或视图不能在函数里应用?请问这个问题如何解决?
|