Oracle 函数中 游标报表或视图不存在

create or replace function get_inner_name(codes varchar2,regex varchar2,tableName varchar2,tempName varchar2,codeName varchar2,temp_type varchar2)
return VARCHAR2 AUTHID CURRENT_USER is names varchar2(4000);
v_temp_name varchar2(300);
v_codes varchar2(4000);
type refcursor is ref cursor;
     result_cursor refcursor;
qry_sql varchar2(4000);

begin
        if (codes is null) then
           return '';
        end if;
        if(codes='') then
           return '';
        end if;
        v_codes := ''''||to_char(replace(codes,regex,''','''))||'''';

         qry_sql := 'select distinct t.'||tempName||' from '||tableName||' t where t.'||codeName||' in('||v_codes||') and '||temp_type;

        open result_cursor for qry_sql;
            loop
                fetch result_cursor  into v_temp_name;
                exit when result_cursor %notfound;
                names := names||','||v_temp_name;
            end loop;
        close result_cursor;
        return substr(names,2);
end get_inner_name;

但是sql单独拿出来是可以查询的,也不报错。

之前没有遇到过,在网上找了找,说是权限有问题,

需要加个AUTHID CURRENT_USER

--AUTHID DEFINER (定义者权限):指编译存储对象的所有者。也是默认权限模式。

--AUTHID CURRENT_USER(调用者权限):指拥有当前会话权限的模式,这可能和当前登录用户相同或不同(alter session set current_schema 可以改变调用者Schema)


更详细的请看:http://blog.csdn.net/indexman/article/details/17067531


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值