› Fóruns › SQL e PL/SQL › Atribuir valor em parâmetro › Responder a: Atribuir valor em parâmetro
Blz ? Não, vc não tem na linguagem SQL comandos NEM para criar NEM para popular variáveis : SUPONDO que vc já tem criadas as variáveis, o que vc PODE fazer na linguagem SQL é INDICAR VALORES SUBSTITUTOS se as variáveis estiverem nulas , tipo :
SELECT * FROM
FROM TabelaX
WHERE DTFAT >= nvl(:DTFATINI, ’01/01/2021′) AND DTFAT <= nvl(:DTFATFIN, TO_CHAR(SYSDATE, ‘DD/MM/YYYY’))
AND CODEMP = :CODEMP
E, OBVIAMENTE, se a coluna em questão é do tipo DATE, vc TEM que passar valores com ESSE datatype, pra evitar conversão implícita ….
EXEMPLO : vou criar minhas bind variables no sqlplus, que não permite BIND de DATEs , vou criar então como string e depois converterei pra data :
scott@DESENV:SQL>variable V_HIREDATE_INI varchar2(10);
scott@DESENV:SQL>variable V_HIREDATE_FIM varchar2(10);
scott@DESENV:SQL>variable
variável v_hiredate_ini
tipo de dados VARCHAR2(10)
variável v_hiredate_fim
tipo de dados VARCHAR2(10)
=> Ok, vou solicitar a conversão da bind variable string pra DATE :
scott@DESENV:SQL>select empno, ename, hiredate from emp where hiredate
between TO_DATE(:v_hiredate_ini, ‘dd/mm/yyyy’) and TO_DATE(:v_hiredate_fim, ‘dd/mm/yyyy’);
não há linhas selecionadas
==> ok, como a variável está vaia não achou ninguém…. AQUi entra o que vc perguntou : embora Não tenha Como vc num comando SQL introduzir valor em variável bind, vc TEM uma função que substitui NULL por outro valor , vou usar :
scott@DESENV:SQL>ed
Gravou file afiedt.buf
1 select empno, ename, hiredate from emp
2 where hiredate between TO_DATE( nvl(:v_hiredate_ini, ’01/01/2021′)
3 , ‘dd/mm/yyyy’
4 )
5 and TO_DATE(nvl(:v_hiredate_fim, to_char(sysdate, ‘dd/mm/yyyy’))
6 , ‘dd/mm/yyyy’
7* )
scott@DESENV:SQL>/
EMPNO ENAME HIREDATE
7935 PATODONALD 05/04/2021 15:08:36
scott@DESENV:SQL>
=> agora vou preencher valores nas variáveis (o que, COMO EU DISSE, TEM que ser feito externamente á linguagem SQL) :
scott@DESENV:SQL>exec :v_hiredate_ini := ’01/01/1981′;
Procedimento PL/SQL concluído com sucesso.
scott@DESENV:SQL>exec :v_hiredate_fim := ’31/12/1981′;
Procedimento PL/SQL concluído com sucesso.
scott@DESENV:SQL>variable
variável v_hiredate_ini
tipo de dados VARCHAR2(10)
variável v_hiredate_fim
tipo de dados VARCHAR2(10)
scott@DESENV:SQL>print v_hiredate_ini
V_HIREDATE_INI
01/01/1981
scott@DESENV:SQL>print v_hiredate_fim
V_HIREDATE_FIM
31/12/1981
scott@DESENV:SQL>l
1 select empno, ename, hiredate from emp
2 where hiredate between TO_DATE( nvl(:v_hiredate_ini, ’01/01/2021′)
3 , ‘dd/mm/yyyy’
4 )
5 and TO_DATE(nvl(:v_hiredate_fim, to_char(sysdate, ‘dd/mm/yyyy’))
6 , ‘dd/mm/yyyy’
7* )
scott@DESENV:SQL>/
EMPNO ENAME HIREDATE
7522 JOSE 22/02/1981 18:42:48
7499 ALLEN 20/02/1981 11:42:17
7521 WARD 22/02/1981 18:42:48
7566 JONES 02/04/1981 04:50:28
7654 MARTIN 28/09/1981 00:26:34
7698 BLAKE 01/05/1981 17:59:01
7782 CLARK 09/06/1981 08:13:10
7839 KING 17/11/1981 05:05:09
7844 TURNER 08/09/1981 14:58:50
7900 JAMES 31/01/1981 02:25:57
7902 FORD 03/12/1981 21:56:24
7523 CHIAPPA 22/02/1981 18:42:48
12 linhas selecionadas.
scott@DESENV:SQL>
[]s
Chiappa