Un seul d'entre eux seraient en vigueur à un moment donné, alors vous feriez effectivement obtenir (par exemple) L'alternative à une coupe L'instruction 'n'pasted CASE() est de façonner la requête en vol avec SQL dynamique.
Voici la démo la plus simple possible.
create or replace function get_emps
(p_dno in emp.deptno%type
, p_sort_col in varchar2 := 'EMPNO'
, p_asc_desc in varchar2 := 'ASC')
return sys_refcursor
is
stmt varchar2(32767);
return_value sys_refcursor;
begin
stmt := 'select * from emp where deptno = :1';
if p_sort_col is not null
then
stmt := stmt ||' order by '||p_sort_col||' '||p_asc_desc;
end if;
open return_value for stmt using p_dno;
return return_value;
end get_emps;
/
C'est en action ...
SQL> var rc refcursor
SQL> exec :rc := get_emps(20, 'ENAME')
PL/SQL procedure successfully completed.
SQL> print rc
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
---------- ---------- --------- ---------- --------- ---------- ---------- ----------
7369 CLARKE CLERK 7902 17-DEC-80 800 20
7902 GASPAROTTO ANALYST 7566 03-DEC-81 3000 20
7876 KULASH CLERK 7788 23-MAY-87 1100 20
7788 RIGBY ANALYST 7566 19-APR-87 3000 20
7566 ROBERTSON MANAGER 7839 02-APR-81 2975 20
SQL> exec :rc := get_emps(20, 'SAL', 'DESC')
PL/SQL procedure successfully completed.
SQL> print rc
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
---------- ---------- --------- ---------- --------- ---------- ---------- ----------
7788 RIGBY ANALYST 7566 19-APR-87 3000 20
7902 GASPAROTTO ANALYST 7566 03-DEC-81 3000 20
7566 ROBERTSON MANAGER 7839 02-APR-81 2975 20
7876 KULASH CLERK 7788 23-MAY-87 1100 20
7369 CLARKE CLERK 7902 17-DEC-80 800 20
SQL>
Quel est le code d'erreur ORA? Et pourquoi concaténez ROWNUM jusqu'à la fin? –
ROWNUM est concaténé pour toujours obtenir les mêmes lignes d'oracle parce que nous faisons la pagination. Le code d'erreur est 'ORA-00905'. –
si l'action est la même pour ASC et DSC pourquoi la vérifier? –