Skip to Main Content

SQL & PL/SQL

Announcement

For appeals, questions and feedback about Oracle Forums, please email oracle-forums-moderators_us@oracle.com. Technical questions should be asked in the appropriate category. Thank you!

Interested in getting your voice heard by members of the Developer Marketing team at Oracle? Check out this post for AppDev or this post for AI focus group information.

How can I do a conditional SQL?

Hello,
How can I make my SQL work conditionally in the WHERE Clause? 
This is the sense that I have:

:is_admin := case when (select ROL_ID from F_ASR_USERS WHERE Trim(USER_IDENTITY) = Trim(coalesce(sys_context('APEX$SESSION','APP_USER'),user))) = 1 then 1 else 0 end;
--IMPORTANT
--IF :is_admin = 1 MUST GET ALL RECORDS (admin)
--IF :is_admin = 0 MUST BRING ONLY CUSTOMER DATA (client)


select 
  FQ7076E3.FEQ70NN as "Numero_Comprobante",
  FQ7076E3.FEQ70NAU2 as "Numero_Autorizacion",
  F0101.ABTAX as "RUC_Emisor",
  to_date(to_date(1900000 + FQ7076E3.FEIVD, 'yyyyddd'),'DD/MM/YYYY') as "Fecha_Emision",
  to_date(to_date(1900000 + FQ7076E3.FEUPMJ, 'yyyyddd'),'DD/MM/YYYY') as "Fecha_Autorizacion",
  FQ7076E3.FETAX as "ID_Fiscal",
  FQ7076E3.FEALPH as "Razon_Social",
  DOCUMENT_TYPE_1,
  sys.dbms_lob.getlength("DOCUMENT_TYPE_1")"Archivo_PDF",
  DOCU.DOCUMENT_FILENAME_1,
  DOCU.DOCUMENT_MIMETYPE_1,
  DOCUMENT_TYPE_2,
  sys.dbms_lob.getlength("DOCUMENT_TYPE_2")"Archivo_XML",
  DOCU.DOCUMENT_FILENAME_2,
  DOCU.DOCUMENT_MIMETYPE_2
 from F0101 F0101,
  F0010 F0010,
  FQ7076E3 FQ7076E3,
  F_ASR_DOCUMENTS DOCU
 where FEDL02='03' 
  and FEQ70DTP='2'
  and FQ7076E3.FECO=F0010.CCCO
  and F0010.CCAN8=F0101.ABAN8
  -- If user is admin it shows all records
  and FQ7076E3.FEQ70NN = DOCU.DOCUMENT_ID(+)
and ( :is_admin = 1 or ( :is_admin = 0 and trim(FQ7076E3.FETAX) = Trim(coalesce(sys_context('APEX$SESSION','APP_USER'),user)) ))

Runs, but does not show data and only works if I remove the variable and the line ( ( :is_admin = 1 or ( :is_admin = 0 and trim(FQ7076E3.FETAX) = Trim(coalesce(sys_context('APEX$SESSION','APP_USER'),user))) ))

This post has been answered by L. Fernigrini on Dec 22 2021
Jump to Answer

Comments

843793
I can't remember exactly how it works, but I'm pretty sure you won't be allowed to compile code that breaks genericity.

Remember, a generic class provides genericity, but you provide the parameter. The only situation that breaks this is if member variables are public - which they shouldn't be.
843793
Hi,
According to the GJ specification, the compiler does store extra parameter information in the class files. There is a process called 'retrofitting' which allows to add this extra information to existing classes.
The Java 2 Collection classes which come with the generics compiler were retrofitted in this way. If, however, you use the 'raw types' it is possible to compile code which violates type constraints, and which will fail only at runtime (the compiler will give an unchecked warning, though).
843793
No its not a limitation but the nature of late binding. Sure you can use a precompiled class like it were a library and access the methods directly since you will know what the signatures are. You are within your rights to create as many illegal casts as you want. The point is Generics will not itself create any bad casts. Nobody can stop a mad programmer...
1 - 3

Post Details

Added on Dec 20 2021
14 comments
874 views