从9.2.0.6升级到10.2.0.5遇到的函数编译错误.

[复制链接]
查看11 | 回复4 | 2011-11-1 16:26:29 | 显示全部楼层 |阅读模式
生产库上的函数是正确的,如下:
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的数据.
我想会不会是因为数据字典的一些表或视图不能在函数里应用?请问这个问题如何解决?


回复

使用道具 举报

千问 | 2011-11-1 16:26:29 | 显示全部楼层
在PL/SQL块中用动态语句显式给用户授予DBA的权限,然后再编译看能否通过
回复

使用道具 举报

千问 | 2011-11-1 16:26:29 | 显示全部楼层
这个视图 应该是as dba 才能看见
回复

使用道具 举报

千问 | 2011-11-1 16:26:29 | 显示全部楼层
这是权限的分别,一种是角色权限,一种是对象权限,通过PROCEDURE会破坏角色获得的权限,显式的授权对象权限就可以了
grant select on SYS.V_$SESSION to FUNCTION_USER
回复

使用道具 举报

千问 | 2011-11-1 16:26:29 | 显示全部楼层
谢谢4楼的指导,问题已经解决.
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行