如何在postgres中为复合类型提供对另一个模式的访问

时间:2018-03-08 14:34:27

标签: postgresql

我是postgres的新手,之前我正在使用oracle.Need帮助提供复合类型的补助。

我创建了一个函数来返回多个数据类型,因为我创建了复合类型。

我的对象和函数都是在模式sys_tech中创建的,它运行得非常好。

但是当我试图从另一个模式(readonly_portal)运行该函数时,我获取数据类型的名称而不是输出中的值。我需要提供授权,它是如何工作的?

由于错误不在代码中,我没有粘贴我的代码。

编辑1:

类型:

 create type mob_mart.ty_valid as (p_ret1 boolean,p_ret2 varchar(500));

功能:

create or replace function mob_mart.validate_sys(p_cid int,p_user varchar2 default null)
return mob_mart.ty_valid  as $$
declare
result_type =mob_mart.ty_valid;
l_cnt int4;
begin
select count(1) into l_cnt from mob_mart.endcompany a ,mob_mart.end_user b where a.id=b.company_id and a.id=p_cid and (b.id=p_user or p_user isnull);
if l_cnt>0 then
 result_type.p_ret1=true;
 result_type.p_ret2 ='Company and user exists';
 else
    if exists(select customer_id from mob_mart.endcompany where customer_id=p_cid limit 1) then
        select id,customer_id into l_uid,l_cust from mob_mart.end_user where id=p_user limit 1;
        if l_uid isnull then
                result_type.p_ret1=false;
                result_type.p_ret2 ='User does not exists in the database';
        elsif(l_cust!=p_cid) then
                result_type.p_ret1=false;
                result_type.p_ret2 ='User Id exists ,but for different company';
        else
                        result_type.p_ret1=false;
                        result_type.p_ret2 ='All condition passed, different error';
        end if;
    end if
end if; -- main if
return result_type;
end
$$
LANGUAGE plpgsql VOLATILE
COST 100;       

此函数将返回两个值,1)布尔值2)描述。

如果值为条件为真,那么desc将为null,如果条件为false,我需要打印它的原因。它是一个简单的验证,它将company_id和user_id作为输入传递,如果两者都存在那么它将会只需返回true,否则会打印出原因。

select mob_mart.validate_sys(111,'test');
输出是 (f,'用户ID存在,但对于不同的公司') - 工作正常,

接下来,我尝试向portal_user提供授权

grant execute on function mob_mart.validate_sys(int,varchar2) to portal_user;

从portal_user访问该函数时,它显示ty_valid作为输出

0 个答案:

没有答案