Pular para o conteúdo
  • Este tópico contém 11 respostas, 3 vozes e foi atualizado pela última vez 17 anos atrás por Rodrigo Almeida.
Visualizando 12 posts - 1 até 12 (de 12 do total)
  • Autor
    Posts
  • #85741
    luizhumb
    Participante

      Bom 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.

      #85743
      Avatar photoRegis Araujo
      Participante

        Bom 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…

        #85744
        luizhumb
        Participante

          Bom dia!

          Executei a consulta informada, porém emite o erro:

          Error: ORA-00907: missing right parenthesis

          #85745
          Avatar photoRegis Araujo
          Participante

            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;

            Abraços….. Espero que agora funcione….

            #85746
            luizhumb
            Participante

              Obrigado 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!

              #85749
              Avatar photoRegis Araujo
              Participante

                Amigo…

                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…

                #85750
                luizhumb
                Participante

                  Funcionou 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!

                  #85755
                  Avatar photoRegis Araujo
                  Participante

                    Ola 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…

                    #85761
                    luizhumb
                    Participante

                      Teria alguma forma de utilizar o union?

                      #85795
                      Rodrigo Almeida
                      Participante

                        Bom! 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 Almeida

                        #85809
                        luizhumb
                        Participante

                          alphamek,

                          Funcionou perfeitamente no Oracle e Sql Server.

                          Muito Obrigado!

                          #85814
                          Rodrigo Almeida
                          Participante

                            legal.

                            SQL/92 neles… utilizando inline views.

                            Abraços,

                            Rodrigo Almeida

                          Visualizando 12 posts - 1 até 12 (de 12 do total)
                          • Você deve fazer login para responder a este tópico.