首页 文章

带有PL / SQL函数的Oracle APEX授权方案返回布尔值

提问于
浏览
0

我想创建一个控制访问过程,但我是PL / SQL的新手,我不明白错误信息 . 如果我创建函数编译它没关系,但如果我把代码放在授权模式中,我就会出错 . 我使用方案类型:PL / SQL函数返回布尔值 .

ORA-06550:第58行,第26列:PLS-00103:当期望以下之一时遇到符号“”:开始函数编译指示过程符号“开始插入之前”“继续 . ”ORA-06550:第60行,列21:PLS-00103:当遇到以下情况之一时遇到符号“文件结束”:(如果循环mod为空pragma raise返回选择更新,则为goto开始情况声明结束异常退出

declare function F_ACCES_AUX_PAGES 
   return BOOLEAN 
is 
-- Indicateurs pages 
v_admn_pages tbl_admn_pages%rowtype; 
v_employes tbl_employes%rowtype; 
BEGIN 
-- Lire les indicateurs de la page 
select * 
  into v_admn_pages 
  from TBL_ADMN_PAGES 
 where PK_NUMERO_PAGE = v('APP_PAGE_ID'); 

select E.* 
  into v_employes 
  from TBL_EMPLOYES E, 
       USERS U 
 where E.PK_ID_EMPLOYE = U.FK_ID_EMPLOYE 
   and USER_NAME = v('APP_USER'); 
-- Vérifier si indicateurs U permettent l'accès. indU = OUI et indP = OUI 
if v_admn_pages.IND_ACC_GESTIONNAIRE = 'OUI' and 
   v_employes.IND_ACC_GESTIONNAIRE = 'OUI' then 
   RETURN TRUE; 
elsif v_admn_pages.IND_ACC_CONSULTANT = 'OUI' and 
   v_employes.IND_ACC_CONSULTANT = 'OUI'         then 
   RETURN TRUE; 
elsif v_admn_pages.IND_ACC_CLIENT = 'OUI' and 
      v_employes.IND_ACC_CLIENT = 'OUI' then 
RETURN TRUE; 
elsif v_admn_pages.IND_ACC_RH = 'OUI' and 
      v_employes.IND_ACC_RH = 'OUI' then 
RETURN TRUE; 
elsif v_admn_pages.IND_ACC_ADMIN_GPS = 'OUI' and 
      v_employes.IND_ACC_ADMIN_GPS = 'OUI'         then 
RETURN TRUE; 
elsif v_admn_pages.IND_ACC_ADMIN_GST = 'OUI' and 
      v_employes.IND_ACC_ADMIN_GST = 'OUI' then 
RETURN TRUE; 
elsif v_admn_pages.IND_ACC_ADMIN_GRH = 'OUI' and 
      v_employes.IND_ACC_ADMIN_GRH = 'OUI' then 
    RETURN TRUE; 
elsif v_admn_pages.IND_ACC_ADMIN_GDP = 'OUI' and 
      v_employes.IND_ACC_ADMIN_GDP = 'OUI' then 
    RETURN TRUE; 
elsif v_admn_pages.IND_ACC_ADMIN_GAC = 'OUI' and 
      v_employes.IND_ACC_ADMIN_GAC = 'OUI' then 
    RETURN TRUE; 
elsif v_admn_pages.IND_ACC_ADMIN_GDA = 'OUI' and 
      v_employes.IND_ACC_ADMIN_GDA = 'OUI' then 
    RETURN TRUE; 
elsif v_admn_pages.IND_ACC_ADMIN_GPS = 'OUI' and 
      v_employes.IND_ACC_ADMIN_GPS = 'OUI' then 
    RETURN TRUE; 
elsif v_admn_pages.IND_ACC_ADMIN_RDD = 'OUI' and 
      v_employes.IND_ACC_ADMIN_RDD = 'OUI' then 
    RETURN TRUE; 
elsif v_admn_pages.IND_ACC_ADMIN_GDE = 'OUI' and 
      v_employes.IND_ACC_ADMIN_GDE = 'OUI' then 
    RETURN TRUE; 
elsif v_admn_pages.IND_ACC_ADMIN_GPR = 'OUI' and
      v_employes.IND_ACC_ADMIN_GPR = 'OUI' then 
    RETURN TRUE; 
elsif v_admn_pages.IND_ACC_ADMIN_GSC = 'OUI' and 
      v_employes.IND_ACC_ADMIN_GSC = 'OUI' then 
    RETURN TRUE; 
else 
    RETURN FALSE; 
end if; 
END F_ACCES_AUX_PAGES; ​

1 回答

  • 0

    您的函数声明用于匿名块中的本地函数;但是你没有完成块,因此它寻找 BEGIN .

    您应该创建函数:

    create or replace function F_ACCES_AUX_PAGES 
       return BOOLEAN 
    is
    -- Indicateurs pages 
    v_admn_pages tbl_admn_pages%rowtype; 
    v_employes tbl_employes%rowtype; 
    BEGIN 
    ...
    END F_ACCES_AUX_PAGES;
    /
    

    有关如何创建存储的PL / SQL程序,请参阅the documentation .

相关问题