- Este tópico contém 11 respostas, 3 vozes e foi atualizado pela última vez 17 anos atrás por
Rodrigo Almeida.
-
AutorPosts
-
12 de março de 2009 às 5:57 pm #85741
luizhumb
ParticipanteBom dia!
A consulta abaixo executa no SQL Server, Oracle 9I, porém no Oracle 8I não executa.
SELECT * FROM Tabela1 T1
WHERE T1.Chave = 1
AND T1.Contador > (SELECT COUNT(*)
FROM Tabela2 T2
WHERE T2.Chave = T1.Chave) + (SELECT COUNT(*)
FROM Tabela3 T3
WHERE T3.Chave = T1.Chave)Error: ORA-00933: SQL command not properly ended
Objetivo da consulta: Somar a Tabela T2 com T3 e apenas retornar os campos da Tabela T1, caso esta soma seja menor que o campo Contador.
12 de março de 2009 às 6:06 pm #85743Regis Araujo
ParticipanteBom dia amigo..
Tente fazer assim…
SELECT * FROM Tabela1 T1
WHERE T1.Chave = 1
AND T1.Contador > ((SELECT COUNT()
FROM Tabela2 T2
WHERE T2.Chave = T1.Chave) + (SELECT COUNT()
FROM Tabela3 T3
WHERE T3.Chave = T1.Chave))Abraços…
12 de março de 2009 às 6:13 pm #85744luizhumb
ParticipanteBom dia!
Executei a consulta informada, porém emite o erro:
Error: ORA-00907: missing right parenthesis
12 de março de 2009 às 6:34 pm #85745Regis Araujo
ParticipanteOpa… faz assim então…
SELECT * FROM TABELA1 T1
WHERE T1.CHAVE = 1
AND T1.CONTADOR > (SELECT ( (SELECT COUNT() FROM TABELA2 T2 WHERE T2.CHAVE = T1.CHAVE) + (SELECT COUNT() FROM TABELA3 T3 WHERE T3.CHAVE = T1.CHAVE) ) FROM DUAL;Abraços….. Espero que agora funcione….
12 de março de 2009 às 6:39 pm #85746luizhumb
ParticipanteObrigado pela ajuda, porém emitiu o mesmo erro.
Será que tem um outro comando sql ansi que faça a soma do resultado de duas selects?
Obrigado!
12 de março de 2009 às 6:58 pm #85749Regis Araujo
ParticipanteAmigo…
Desculpe… esqueci de uma coisa…
Coloca o ) no fim da query….
MensagemEnviada: 2009-03-12, 12:34:43 Assunto:
Opa… faz assim então…SELECT * FROM TABELA1 T1
WHERE T1.CHAVE = 1
AND T1.CONTADOR > (SELECT ( (SELECT COUNT() FROM TABELA2 T2 WHERE T2.CHAVE = T1.CHAVE) + (SELECT COUNT() FROM TABELA3 T3 WHERE T3.CHAVE = T1.CHAVE) ) FROM DUAL)Eu acabei colocando ; ao inves de )…
Desculpe….
Agora funfa…!!
Abraços…
12 de março de 2009 às 7:04 pm #85750luizhumb
ParticipanteFuncionou perfeitamente. Tem apenas um porém essa consulta será executado em bancos como SQL Server. Teria uma outra alteranativa?
Testei no Oracel 8I e 9I funcionou blza.
Obrigado!
12 de março de 2009 às 7:54 pm #85755Regis Araujo
ParticipanteOla amigo,
Bom, não sei se haveria outra maneira para rodar no Sql Server, oq vc pode fazer é adaptar este select para o padrão SQL Server….
Abraços…
12 de março de 2009 às 9:51 pm #85761luizhumb
ParticipanteTeria alguma forma de utilizar o union?
15 de março de 2009 às 7:49 am #85795Rodrigo Almeida
ParticipanteBom! Rodar esse SELECT no SQL Server e no Oracle 8i e 9i não vejo muitas soluções, porquê?
No SQL Server 7/2000 e no Oracle 9i, usa-se o padrão SQL ANSI, ou seja, a mesma estrutura na escrita da SQL podem ser utilizadas em ambas plataformas que serão executados, assim como poderia executar esse SELECT também numa base DB2 ou PostGree que funciona!
No Oracle 8i, não tinha o padrão SQL ANSI, e sim, SQL/92 e SQL/93 por isso o Motor SQL não consegue realziar o parse da sua instrução e compila com errors.
Um Modo que talves possa resolver seria esse:
SELECT *
FROM Tabela1 T1,
(SELECT COUNT() Total2 FROM Tabela2 WHERE T2.Chave = 1) T2,
(SELECT COUNT() Total3 FROM Tabela3 WHERE T3.Chave = 1) T3
WHERE T1.Chave = 1
AND T1.Contador > (Total2 + Total3);Abraços,
Rodrigo Almeida16 de março de 2009 às 4:18 pm #85809luizhumb
Participantealphamek,
Funcionou perfeitamente no Oracle e Sql Server.
Muito Obrigado!
16 de março de 2009 às 6:58 pm #85814Rodrigo Almeida
Participantelegal.
SQL/92 neles… utilizando inline views.
Abraços,
Rodrigo Almeida
-
AutorPosts
- Você deve fazer login para responder a este tópico.