Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Wilke1

[Resolvido]  com essa select unionall no oracle

Recommended Posts

ola a todos pessoal estou tentando montar essa select mas ela dar erro de missing parentesis

voces tem ideia do que seja?

:unsure:

SELECT /*+ INDEX(FP IE_FORNECEDOR_PRODUTO4)*/

FP.CD_FORNECEDOR, FP.CD_REF_PRODUTO, FP.QT_POR_EMBALAGEM, FP.QT_EMB_EMBARQUE, FP.CD_UNIDADE,

FP.VL_CUSTO_TABELA, P.CD_DEPARTAMENTO, P.CD_SETOR, P.CD_PRODUTO, P.NM_PRODUTO, P.FL_PESO_VARIAVEL, PL.VL_CUSTO_LIQUIDO,

PL.QT_EST_MIN_DEPOSITO QT_FRACIONADA,PL.CD_LOJA, PL.QT_ESTOQUE_DEPOSITO, PL.QT_ESTOQUE,O

 

FROM ( SELECT /*+ INDEX(FP IE_FORNECEDOR_PRODUTO4)*/

FP.CD_FORNECEDOR, FP.CD_REF_PRODUTO, FP.QT_POR_EMBALAGEM, FP.QT_EMB_EMBARQUE, FP.CD_UNIDADE,

FP.VL_CUSTO_TABELA, P.CD_DEPARTAMENTO, P.CD_SETOR, P.CD_PRODUTO, P.NM_PRODUTO, P.FL_PESO_VARIAVEL, PL.VL_CUSTO_LIQUIDO,

PL.QT_EST_MIN_DEPOSITO QT_FRACIONADA,PL.CD_LOJA, PL.QT_ESTOQUE_DEPOSITO, PL.QT_ESTOQUE,O

 

FROM TB_PRODUTO_LOJA PL, TB_PRODUTO P, TB_FORNECEDOR_PRODUTO FP

WHERE FP.CD_FORNECEDOR = '0005221005' AND

FP.CD_DIVISAO IN(5057005) AND

FP.DT_FORA_LINHA IS NULL AND

P.CD_PRODUTO = FP.CD_PRODUTO AND

P.FL_ATIVO_INATIVO = 'A' AND

PL.CD_PRODUTO = P.CD_PRODUTO AND

PL.CD_LOJA = '030' AND

PL.DT_FORA_LINHA IS NULL

ORDER BY P.CD_DEPARTAMENTO, P.CD_SETOR, P.NM_PRODUTO

UNION ALL

 

SELECT O /*+ INDEX(FP IE_FORNECEDOR_PRODUTO4)*/

FP.CD_FORNECEDOR, FP.CD_REF_PRODUTO, FP.QT_POR_EMBALAGEM, FP.QT_EMB_EMBARQUE, FP.CD_UNIDADE,

FP.VL_CUSTO_TABELA, P.CD_DEPARTAMENTO, P.CD_SETOR, P.CD_PRODUTO, P.NM_PRODUTO, P.FL_PESO_VARIAVEL, PL.VL_CUSTO_LIQUIDO,

PL.QT_EST_MIN_DEPOSITO QT_FRACIONADA,PL.CD_LOJA, PL.QT_ESTOQUE_DEPOSITO, PL.QT_ESTOQUE,O

 

FROM TB_PRODUTO_LOJA PL, TB_PRODUTO P, TB_FORNECEDOR_PRODUTO FP

 

WHERE FP.CD_FORNECEDOR = '0005221005' AND

FP.CD_DIVISAO IN(5057005) AND

FP.DT_FORA_LINHA IS NULL AND

P.CD_PRODUTO = FP.CD_PRODUTO AND

P.FL_ATIVO_INATIVO = 'A' AND

PL.CD_PRODUTO = P.CD_PRODUTO AND

PL.CD_LOJA = '001' AND

PL.DT_FORA_LINHA IS NULL

ORDER BY P.CD_DEPARTAMENTO, P.CD_SETOR, P.NM_PRODUTO

)

Compartilhar este post


Link para o post
Compartilhar em outros sites

eu não conheço muito a fundo o sql mas me parece faltar select também para a linha 13 do seu post contando a partir do 1º select, aquele from parece não ter uma consulta atrelada, sem contar que parece faltar os ';' para separar os selects.

 

mas como não conheço a fundo a linguagem SQL, meu post pode ser ignorado

 

Quanto aos parêntestes, não encontrei nenhum parênteses esquecido aberto, talvez seja algum comando que não foi colocado parenteses...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Boa tarde!

Faz tempo que não participo mais do fórum, hehe.. mas vamos ao que interessa:

 

Wilke1, apenas organizei tua query de uma forma que eu entendesse melhor e ficasse mais claro, e pude ver que no teu terceiro select, (o segundo do union all), tu tem a coluna "O" duas vezes sem alias diferentes, isso provavelmente vai dar erro, mas na linha 52 (após o comando "select") tu adiciona está coluna e após tu adiciona o "Hint" mas acredito estar errado está parte pois o hint deveria ser o primeiro, e como logo após o hint tu tem outra coluna sem a vírgula antes, ocorre o erro.

 

Outra questão seria o primeiro hint: acredito que ele não irá fazer diferença nenhuma na tua query pois a tabela do primeiro from é o select com o union e ele em si não possui um hint. Alguém poderia confirmar?

 

ps.: Tu força este hint pois está muito lenta tua consulta?

 

select /*+ INDEX(fp ie_fornecedor_produto4)*/
	   fp.cd_fornecedor
	 , fp.cd_ref_produto
	 , fp.qt_por_embalagem
	 , fp.qt_emb_embarque
	 , fp.cd_unidade
	 , fp.vl_custo_tabela
	 , p.cd_departamento
	 , p.cd_setor
	 , p.cd_produto
	 , p.nm_produto
	 , p.fl_peso_variavel
	 , pl.vl_custo_liquido
	 , pl.qt_est_min_deposito qt_fracionada
	 , pl.cd_loja
	 , pl.qt_estoque_deposito
	 , pl.qt_estoque
	 , o
  from ( select /*+ INDEX(fp ie_fornecedor_produto4)*/
			  , fp.cd_fornecedor
			  , fp.cd_ref_produto
			  , fp.qt_por_embalagem
			  , fp.qt_emb_embarque
			  , fp.cd_unidade
			  , fp.vl_custo_tabela
			  , p.cd_departamento
			  , p.cd_setor
			  , p.cd_produto
			  , p.nm_produto
			  , p.fl_peso_variavel
			  , pl.vl_custo_liquido
			  , pl.qt_est_min_deposito qt_fracionada
			  , pl.cd_loja
			  , pl.qt_estoque_deposito
			  , pl.qt_estoque
			  , o
		   from tb_produto_loja	   pl
			  , tb_produto			p
			  , tb_fornecedor_produto fp
		  where fp.cd_fornecedor   = '0005221005'
			and fp.cd_divisao in (5057005)
			and fp.dt_fora_linha is null
			and p.cd_produto	   = fp.cd_produto
			and p.fl_ativo_inativo = 'A'
			and pl.cd_produto	  = p.cd_produto
			and pl.cd_loja		 = '030'
			and pl.dt_fora_linha is null
		  order by p.cd_departamento
				 , p.cd_setor
				 , p.nm_produto
		 union all
/*linha 52*/		 select o /*+ INDEX(fp ie_fornecedor_produto4)*/
			   fp.cd_fornecedor
			  , fp.cd_ref_produto
			  , fp.qt_por_embalagem
			  , fp.qt_emb_embarque
			  , fp.cd_unidade
			  , fp.vl_custo_tabela
			  , p.cd_departamento
			  , p.cd_setor
			  , p.cd_produto
			  , p.nm_produto
			  , p.fl_peso_variavel
			  , pl.vl_custo_liquido
			  , pl.qt_est_min_deposito qt_fracionada
			  , pl.cd_loja
			  , pl.qt_estoque_deposito
			  , pl.qt_estoque
			  , o
		   from tb_produto_loja	   pl
			  , tb_produto			p
			  , tb_fornecedor_produto fp
		  where fp.cd_fornecedor   = '0005221005'
			and fp.cd_divisao in (5057005)
			and fp.dt_fora_linha is null
			and p.cd_produto	   = fp.cd_produto
			and p.fl_ativo_inativo = 'A'
			and pl.cd_produto	  = p.cd_produto
			and pl.cd_loja		 = '001'
			and pl.dt_fora_linha is null
		  order by p.cd_departamento
				 , p.cd_setor
				 , p.nm_produto
	   )

Compartilhar este post


Link para o post
Compartilhar em outros sites

Boa tarde!

Faz tempo que não participo mais do fórum, hehe.. mas vamos ao que interessa:

 

Wilke1, apenas organizei tua query de uma forma que eu entendesse melhor e ficasse mais claro, e pude ver que no teu terceiro select, (o segundo do union all), tu tem a coluna "O" duas vezes sem alias diferentes, isso provavelmente vai dar erro, mas na linha 52 (após o comando "select") tu adiciona está coluna e após tu adiciona o "Hint" mas acredito estar errado está parte pois o hint deveria ser o primeiro, e como logo após o hint tu tem outra coluna sem a vírgula antes, ocorre o erro.

 

Outra questão seria o primeiro hint: acredito que ele não irá fazer diferença nenhuma na tua query pois a tabela do primeiro from é o select com o union e ele em si não possui um hint. Alguém poderia confirmar?

 

ps.: Tu força este hint pois está muito lenta tua consulta?

 

select /*+ INDEX(fp ie_fornecedor_produto4)*/
	   fp.cd_fornecedor
	 , fp.cd_ref_produto
	 , fp.qt_por_embalagem
	 , fp.qt_emb_embarque
	 , fp.cd_unidade
	 , fp.vl_custo_tabela
	 , p.cd_departamento
	 , p.cd_setor
	 , p.cd_produto
	 , p.nm_produto
	 , p.fl_peso_variavel
	 , pl.vl_custo_liquido
	 , pl.qt_est_min_deposito qt_fracionada
	 , pl.cd_loja
	 , pl.qt_estoque_deposito
	 , pl.qt_estoque
	 , o
  from ( select /*+ INDEX(fp ie_fornecedor_produto4)*/
			  , fp.cd_fornecedor
			  , fp.cd_ref_produto
			  , fp.qt_por_embalagem
			  , fp.qt_emb_embarque
			  , fp.cd_unidade
			  , fp.vl_custo_tabela
			  , p.cd_departamento
			  , p.cd_setor
			  , p.cd_produto
			  , p.nm_produto
			  , p.fl_peso_variavel
			  , pl.vl_custo_liquido
			  , pl.qt_est_min_deposito qt_fracionada
			  , pl.cd_loja
			  , pl.qt_estoque_deposito
			  , pl.qt_estoque
			  , o
		   from tb_produto_loja	   pl
			  , tb_produto			p
			  , tb_fornecedor_produto fp
		  where fp.cd_fornecedor   = '0005221005'
			and fp.cd_divisao in (5057005)
			and fp.dt_fora_linha is null
			and p.cd_produto	   = fp.cd_produto
			and p.fl_ativo_inativo = 'A'
			and pl.cd_produto	  = p.cd_produto
			and pl.cd_loja		 = '030'
			and pl.dt_fora_linha is null
		  order by p.cd_departamento
				 , p.cd_setor
				 , p.nm_produto
		 union all
/*linha 52*/		 select o /*+ INDEX(fp ie_fornecedor_produto4)*/
			   fp.cd_fornecedor
			  , fp.cd_ref_produto
			  , fp.qt_por_embalagem
			  , fp.qt_emb_embarque
			  , fp.cd_unidade
			  , fp.vl_custo_tabela
			  , p.cd_departamento
			  , p.cd_setor
			  , p.cd_produto
			  , p.nm_produto
			  , p.fl_peso_variavel
			  , pl.vl_custo_liquido
			  , pl.qt_est_min_deposito qt_fracionada
			  , pl.cd_loja
			  , pl.qt_estoque_deposito
			  , pl.qt_estoque
			  , o
		   from tb_produto_loja	   pl
			  , tb_produto			p
			  , tb_fornecedor_produto fp
		  where fp.cd_fornecedor   = '0005221005'
			and fp.cd_divisao in (5057005)
			and fp.dt_fora_linha is null
			and p.cd_produto	   = fp.cd_produto
			and p.fl_ativo_inativo = 'A'
			and pl.cd_produto	  = p.cd_produto
			and pl.cd_loja		 = '001'
			and pl.dt_fora_linha is null
		  order by p.cd_departamento
				 , p.cd_setor
				 , p.nm_produto
	   )

 

ola a todos pessoal estou tentando montar essa select mas ela dar erro de missing parentesis

voces tem ideia do que seja?

:unsure:

SELECT /*+ INDEX(FP IE_FORNECEDOR_PRODUTO4)*/

FP.CD_FORNECEDOR, FP.CD_REF_PRODUTO, FP.QT_POR_EMBALAGEM, FP.QT_EMB_EMBARQUE, FP.CD_UNIDADE,

FP.VL_CUSTO_TABELA, P.CD_DEPARTAMENTO, P.CD_SETOR, P.CD_PRODUTO, P.NM_PRODUTO, P.FL_PESO_VARIAVEL, PL.VL_CUSTO_LIQUIDO,

PL.QT_EST_MIN_DEPOSITO QT_FRACIONADA,PL.CD_LOJA, PL.QT_ESTOQUE_DEPOSITO, PL.QT_ESTOQUE,O

 

FROM ( SELECT /*+ INDEX(FP IE_FORNECEDOR_PRODUTO4)*/

FP.CD_FORNECEDOR, FP.CD_REF_PRODUTO, FP.QT_POR_EMBALAGEM, FP.QT_EMB_EMBARQUE, FP.CD_UNIDADE,

FP.VL_CUSTO_TABELA, P.CD_DEPARTAMENTO, P.CD_SETOR, P.CD_PRODUTO, P.NM_PRODUTO, P.FL_PESO_VARIAVEL, PL.VL_CUSTO_LIQUIDO,

PL.QT_EST_MIN_DEPOSITO QT_FRACIONADA,PL.CD_LOJA, PL.QT_ESTOQUE_DEPOSITO, PL.QT_ESTOQUE,O

 

FROM TB_PRODUTO_LOJA PL, TB_PRODUTO P, TB_FORNECEDOR_PRODUTO FP

WHERE FP.CD_FORNECEDOR = '0005221005' AND

FP.CD_DIVISAO IN(5057005) AND

FP.DT_FORA_LINHA IS NULL AND

P.CD_PRODUTO = FP.CD_PRODUTO AND

P.FL_ATIVO_INATIVO = 'A' AND

PL.CD_PRODUTO = P.CD_PRODUTO AND

PL.CD_LOJA = '030' AND

PL.DT_FORA_LINHA IS NULL

ORDER BY P.CD_DEPARTAMENTO, P.CD_SETOR, P.NM_PRODUTO

UNION ALL

 

SELECT O /*+ INDEX(FP IE_FORNECEDOR_PRODUTO4)*/

FP.CD_FORNECEDOR, FP.CD_REF_PRODUTO, FP.QT_POR_EMBALAGEM, FP.QT_EMB_EMBARQUE, FP.CD_UNIDADE,

FP.VL_CUSTO_TABELA, P.CD_DEPARTAMENTO, P.CD_SETOR, P.CD_PRODUTO, P.NM_PRODUTO, P.FL_PESO_VARIAVEL, PL.VL_CUSTO_LIQUIDO,

PL.QT_EST_MIN_DEPOSITO QT_FRACIONADA,PL.CD_LOJA, PL.QT_ESTOQUE_DEPOSITO, PL.QT_ESTOQUE,O

 

FROM TB_PRODUTO_LOJA PL, TB_PRODUTO P, TB_FORNECEDOR_PRODUTO FP

 

WHERE FP.CD_FORNECEDOR = '0005221005' AND

FP.CD_DIVISAO IN(5057005) AND

FP.DT_FORA_LINHA IS NULL AND

P.CD_PRODUTO = FP.CD_PRODUTO AND

P.FL_ATIVO_INATIVO = 'A' AND

PL.CD_PRODUTO = P.CD_PRODUTO AND

PL.CD_LOJA = '001' AND

PL.DT_FORA_LINHA IS NULL

ORDER BY P.CD_DEPARTAMENTO, P.CD_SETOR, P.NM_PRODUTO

)

Valeu amigo,voce ajudou bastante.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.