- Este tópico contém 5 respostas, 2 vozes e foi atualizado pela última vez 1 ano, 11 meses atrás por José Laurindo Chiappa.
-
AutorPosts
-
25 de janeiro de 2023 às 8:44 am #162944BarizonParticipante
Bom dia, prezados!
Estou com uma consulta e gostaria de personalizar o nome dos campos, consegui fazer em uma parte deles, mas reparei que os que são usados no “where” dão erro da maneira que estou fazendo. Existe alguma maneira de fazer isso?
SELECT *
FROM (select n.tent_tiponot_1_o1,
o.ordn_emitent_1 as “Emitente”,
o.ordn_nrordem_1 as “Número da OS”,
n.tent_nomefor_1 as “Cliente”,
n.tent_nronota_1 as “Número da NF de Entrada”,
o.ordn_nrosaid_1,
TRUNC(SYSDATE – tent_recpdat_1) as dif_dias
from notent n inner join ordnot o on n.tent_nronota_1 = o.ordn_nroentr_1
)
WHERE
dif_dias between 160 and 180 and tent_tiponot_1_o1 = ’87’ and ordn_nrosaid_1 = ‘0’25 de janeiro de 2023 às 12:25 pm #162979José Laurindo ChiappaModeradorBlz ? Então, a sintaxe/lógica é BEM SIMPLES : eu vejo que vc usou uma INLINE VIEW (ie, usou a query original como fonte de dados no FROM, encapsulando-a)… Nesse caso, por exemplo se vc escreveu :
tent_nronota_1 as “Número da NF de Entrada”,
a inline view RENOMEOU a coluna tent_nronota_1 para “Número da NF de Entrada” a a coluna original NÃO EXISTE MAIS, então (obviamente) o WHERE EXTERNO não a pode referenciar…
Porém, olhando por cima, eu vejo que tanto a coluna dif_dias quanto a coluna tent_tiponot_1_o1 E a coluna ordn_nrosaid_1 vc NÃO COLOCOU ALIAS, então elas vieram com o mesmo EXATO nome que estavam, o WHERE parece estar usando os nomes certinho : ACHO que teu erro aí foi de OUTRA COISA, talvez datatypes errados, usar aspas num campo numérico, algo no estilo : PLEASE mostra pra gente EXATAMENTE o erro que dá, NA ÍNTEGRA….
25 de janeiro de 2023 às 2:47 pm #162986BarizonParticipanteObrigado Chiappa, vou enviar a maneira que fiz da maneira que achei que daria certo e o erro que retorna na execução:
SELECT *
FROM (select n.tent_tiponot_1_o1 as “Tipo NF”,
o.ordn_emitent_1 as “Emitente”,
o.ordn_nrordem_1 as “Número da OS”,
n.tent_nomefor_1 as “Cliente”,
n.tent_nronota_1 as “NF de Entrada”,
o.ordn_nrosaid_1 as “NF de Retorno”,
TRUNC(SYSDATE – tent_recpdat_1) as “Dias NF Entrada”
from notent n inner join ordnot o on n.tent_nronota_1 = o.ordn_nroentr_1
)
WHERE
Dias NF Entrada between 160 and 180 and Tipo NF = ’87’ and NF de Retorno = ‘0’Erro: ORA-00920: operador relacional inválido
25 de janeiro de 2023 às 4:36 pm #162991José Laurindo ChiappaModeradorSim, AGORA sim vendo o erro é possível a gente te mostrar : o que acontece aí é que essa coluna “Dias NF Entrada” vc criou entre aspas duplas (corretamente, já que vc QUER criar ele com espaços em branco E respeitando maiusc/minusc), mas veja o que vc escreveu no WHERE :
WHERE Dias NF Entrada between….
ORA, se vc CRIOU com aspas-duplas vc TEM QUE USAR com aspas-duplas, deveria ser :
WHERE
“Dias NF Entrada” between …..SEM as aspas, o Oracle ao encontrar esse Dias NF Entrada vai PENSAR que vc está se referindo a um identificador chamado Dias E a um outro chamado NF E a um outro chamado Entrada, na linguagem SQL o espaço em branco serve para SEPARAR os comandos/identificadores, dái o erro….
Blz ?
Abraços,
Chiappa
já que
25 de janeiro de 2023 às 5:25 pm #162992BarizonParticipanteMeu grande oráculo Chiappa, muito obrigado!
26 de janeiro de 2023 às 9:58 am #163021José Laurindo ChiappaModeradorDeu certinho, né ? CONHECENDO o Conceito de que espaços em branco e quebras de linha SÃO considerados delimitadores (e assim sendo TEM significado para o PARSE), E QUE no Oracle ** TODOS OS IDENTIFICADORES ** , seja nome de variável, coluna, tabela, ou o que for, SE vc quiser respeitar maiusc/minusc além de usar caracteres com significado especial como espaços em branco vc TEM que os criar e usar SEMPRE dentro de aspas-duplas, fica biquinho de entender a questão e a resolver….
Abraços,
José Laurindo Chiappa
-
AutorPosts
- Você deve fazer login para responder a este tópico.