我是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作为输出