- Este tópico contém 4 respostas, 2 vozes e foi atualizado pela última vez 3 anos, 7 meses atrás por Eliza.
-
AutorPosts
-
23 de abril de 2021 às 1:34 pm #147676ElizaParticipante
Boa tarde pessoal,
Tenho uma dúvida.
select * from
FROM TabelaX
WHERE
DTFAT >= :DTFATINI AND DTFAT <= :DTFATFIN
AND CODEMP = :CODEMPNeste sql, se o usuário não informar nada nas datas inicial e final, então eu preciso que eles assumam os valores:
dtfatini = ’01/01/2021′
dtfatfim = sysdate
Como atribuir valores para parâmetros de um Select ?
23 de abril de 2021 às 2:17 pm #147679José Laurindo ChiappaModeradorBlz ? 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 = :CODEMPE, 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.buf1 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_iniV_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:4812 linhas selecionadas.
scott@DESENV:SQL>
[]s
Chiappa
23 de abril de 2021 às 2:41 pm #147680ElizaParticipanteEntendi.
Vlw pela super explicação!!!
23 de abril de 2021 às 3:37 pm #147683José Laurindo ChiappaModeradorBlz, fico contente de poder ter ajudado…. Só relembro os pontos de atenção que eu indiquei, ie : DATATYPES das bind variables que vc está criando, conversão Explícita sempre, , etc….
23 de abril de 2021 às 3:48 pm #147684ElizaParticipanteSimmmm…. e eu sofrendo desde cedo.
Agora deu certo!!!
Que bom que existe um grupo de pessoas que se ajudam!!
-
AutorPosts
- Você deve fazer login para responder a este tópico.