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

Oracle APEX授权方案,PL/SQL函数返回布尔值,oracle,authorization,schema,oracle-apex,Oracle,Authorization,Schema,Oracle Apex,我想创建一个控制访问过程,但我是PL/SQL新手,不理解错误消息。如果我在编译过程中创建了这个函数,它是可以的,但是如果我把代码放在授权模式中,我就有一个错误。我使用scheme类型:PL/SQL函数返回布尔值 ORA-06550:第58行,第26列:PLS-00103:在预期以下情况之一时遇到符号“”:开始函数pragma过程符号“开始在”之前插入继续。ORA-06550:第60行,第21列:PLS-00103:在预期以下情况之一时遇到符号“文件结束”:(begin case declare

我想创建一个控制访问过程,但我是PL/SQL新手,不理解错误消息。如果我在编译过程中创建了这个函数,它是可以的,但是如果我把代码放在授权模式中,我就有一个错误。我使用scheme类型:PL/SQL函数返回布尔值

ORA-06550:第58行,第26列:PLS-00103:在预期以下情况之一时遇到符号“”:开始函数pragma过程符号“开始在”之前插入继续。ORA-06550:第60行,第21列:PLS-00103:在预期以下情况之一时遇到符号“文件结束”:(begin case declare end exception exit for goto if loop mod null pragma raise return select update when with with
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; ​

您的函数声明是针对匿名块中的本地函数的;但是您没有完成该块,因此它会查找
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程序,请参见