[firebase-br] Consegui mas faltam duas coisas.

//---- Kelsie.Z.Marshall ----// kelsie.z.marshall em gmail.com
Sáb Ago 8 18:45:32 -03 2009


Consegui abaixo a  rotina com a verificação do CNPJ na tabela.

1)
Eu queria passar o nome da tabela como parametro até criei o parametro 
IN_TABELA mas quando substituo pelo nome da tabela no SQL FROM dá está 
mensagem

ISC ERROR CODE:335544569

ISC ERROR MESSAGE:
Dynamic SQL Error
SQL error code = -204
Table unknown
IN_TABELA


DECLARE VARIABLE CNPJ_TEMP VARCHAR(14);
DECLARE VARIABLE TAB_TEMP VARCHAR(250);
DECLARE VARIABLE D1 integer;
DECLARE VARIABLE D2 integer;
DECLARE VARIABLE CALCULADO char(2);
DECLARE VARIABLE DIGITADO char(2);
BEGIN
 FOR
   SELECT CNPJ
   FROM BIG_TABLE /*----------aqui substituir por INTABELA não funciona */
   INTO :CNPJ_TEMP
 DO
 BEGIN
  D1 = 0;
  D1 = D1 + cast(substrlen(CNPJ_TEMP,1,1) as integer) * 5;
  D1 = D1 + cast(substrlen(CNPJ_TEMP,2,1) as integer) * 4;
  D1 = D1 + cast(substrlen(CNPJ_TEMP,3,1) as integer) * 3;
  D1 = D1 + cast(substrlen(CNPJ_TEMP,4,1) as integer) * 2;
  D1 = D1 + cast(substrlen(CNPJ_TEMP,5,1) as integer) * 9;
  D1 = D1 + cast(substrlen(CNPJ_TEMP,6,1) as integer) * 8;
  D1 = D1 + cast(substrlen(CNPJ_TEMP,7,1) as integer) * 7;
  D1 = D1 + cast(substrlen(CNPJ_TEMP,8,1) as integer) * 6;
  D1 = D1 + cast(substrlen(CNPJ_TEMP,9,1) as integer) * 5;
  D1 = D1 + cast(substrlen(CNPJ_TEMP,10,1) as integer) * 4;
  D1 = D1 + cast(substrlen(CNPJ_TEMP,11,1) as integer) * 3;
  D1 = D1 + cast(substrlen(CNPJ_TEMP,12,1) as integer) * 2;
  D1 = 11 - (mod(D1,11));
  if (D1>=10) then D1=0;
  D2 = 0;
  D2 = D2 + cast(substrlen(CNPJ_TEMP,1,1) as integer) * 6;
  D2 = D2 + cast(substrlen(CNPJ_TEMP,2,1) as integer) * 5;
  D2 = D2 + cast(substrlen(CNPJ_TEMP,3,1) as integer) * 4;
  D2 = D2 + cast(substrlen(CNPJ_TEMP,4,1) as integer) * 3;
  D2 = D2 + cast(substrlen(CNPJ_TEMP,5,1) as integer) * 2;
  D2 = D2 + cast(substrlen(CNPJ_TEMP,6,1) as integer) * 9;
  D2 = D2 + cast(substrlen(CNPJ_TEMP,7,1) as integer) * 8;
  D2 = D2 + cast(substrlen(CNPJ_TEMP,8,1) as integer) * 7;
  D2 = D2 + cast(substrlen(CNPJ_TEMP,9,1) as integer) * 6;
  D2 = D2 + cast(substrlen(CNPJ_TEMP,10,1) as integer) * 5;
  D2 = D2 + cast(substrlen(CNPJ_TEMP,11,1) as integer) * 4;
  D2 = D2 + cast(substrlen(CNPJ_TEMP,12,1) as integer) * 3;
  D2 = D2 + D1 * 2;
  D2 = 11 - (mod(D2,11));
  if (D2>=10) then D2=0;
  CALCULADO = (cast(D1 as char) || cast(D2 as char));
  DIGITADO  = substrlen(CNPJ_TEMP,13,1) || substrlen(CNPJ_TEMP,14,1);
  IF (CALCULADO!=DIGITADO) then
    DELETE FROM BIG_TABLE WHERE CNPJ = :CNPJ_TEMP; /*----------aqui 
substituir por INTABELA não funciona */
  SUSPEND;
 END
END

2)
Agora vou fazer o que o Eduardo falou uma UDF e depois comparar os 
resultados.

Alguém sabe por onde começo ?






Mais detalhes sobre a lista de discussão lista