ORA-01795:o número máximo de expressões em lista é de 1000

Dúvidas, dicas e truques de SQL, Select, Update, Delete, cláusulas, operações com joins, Funções em SQLs, etc
bride
Rank: Analista Júnior
Rank: Analista Júnior
Mensagens: 98
Registrado em: Qua, 24 Set 2008 11:00 pm
Localização: Belo Horizonte - MG
Bride
OCA Oracle PL/SQL Developer Certified Associate

Selecionar tudo

SQL.Append("       INNER JOIN SAG_CADPRIATD PRIATV ON PRIATV.IDCPRIATD = CADATV.IDCPRIATD ");
            SQL.Append("       INNER JOIN SAG_CADPRIATD PRILOT ON PRILOT.IDCPRIATD = LOT.IDCPRIATD ");
            SQL.AppendFormat("WHERE (ORDSVC.IDCLOT IN ( {0} )) ", strIdcLots);
Pessoal estou com o erro ora minha variavel retorna um numero maior que mil
DanielNN
Moderador
Moderador
Mensagens: 641
Registrado em: Seg, 03 Set 2007 3:26 pm
Localização: Fortaleza - CE
att,

Daniel N.N.

Realmente há essa limitação de 1000 elementos dentro de um "IN".
Pode-se fazer 2 alternativas.
1- Tratar condicionalmente sua condição limitando os valores (melhor desempenho):

Selecionar tudo

WHERE (ORDSVC.IDCLOT IN ( a1,a2,...,a998,a999)
OR (ORDSVC.IDCLOT IN ( a1000,a1001,...,a1998,a1999))
2-Gravar numa tabela os valores que você quer filtrar e fazer um join com seu select principal.
bride
Rank: Analista Júnior
Rank: Analista Júnior
Mensagens: 98
Registrado em: Qua, 24 Set 2008 11:00 pm
Localização: Belo Horizonte - MG
Bride
OCA Oracle PL/SQL Developer Certified Associate

Noctifero boa tarde, eu fiz um pouco diferente eu peguei a string e montei ela como varios or, vou testar aqui, porque ai teria varios or, e montaria em modo de execução seria diferente da tabela que não precisaria de limpa-la depois


aqui eu monto a string

Selecionar tudo

     if (vetorIdcLot.Length <= 1000)
            {
                condicaoIDCLote.AppendFormat("ORDSVC.IDCLOT in ({0})", strIdcLots);
            }
            else
            {
                condicaoIDCLote.AppendFormat("(ORDSVC.IDCLOT = {0})", vetorIdcLot[0]);
                for (int i = 1; i < vetorIdcLot.Length; i++)
                {
                    condicaoIDCLote.AppendFormat(" OR ( ORDSVC.IDCLOT = {0} )", vetorIdcLot[i]);
                }
            }

aqui coloco ela na consulta sql

Selecionar tudo

SQL.AppendFormat("WHERE ({0}) ", condicaoIDCLote.ToString());
DanielNN
Moderador
Moderador
Mensagens: 641
Registrado em: Seg, 03 Set 2007 3:26 pm
Localização: Fortaleza - CE
att,

Daniel N.N.

Beleza, acho que não me expressei tão bem mas era o que queria dizer.
Já precisei fazer algo semelhante e substituia o parametro pela condição quebrada por varios ORs.
bride
Rank: Analista Júnior
Rank: Analista Júnior
Mensagens: 98
Registrado em: Qua, 24 Set 2008 11:00 pm
Localização: Belo Horizonte - MG
Bride
OCA Oracle PL/SQL Developer Certified Associate

Sim, so que no seu caso você colocouvarios or com in, estou unsando literalmente varios or... pra testar estou montando eles dentro da sql
Responder
  • Informação
  • Quem está online

    Usuários navegando neste fórum: Nenhum usuário registrado e 7 visitantes