[firebase-br] Seria BUG do Firebird? (Ou eu sou o bug?)

Francisco Thiago jeandeadlucky em yahoo.com.br
Qua Jan 24 15:24:44 -03 2007


Caros amigos...

Vejam a seguinte situação.

Eu quero que na tabela B sejam inseridos os valores da tabela A, sendo que 
os que já existirem em B sejam simplesmente atualizados...

O problema é que...

For select A.Codigo
     from A
     Into variavel_A
do
begin
  Select B.Codigo
  from B
  where B.Fk_A = :variavel_A
  into Variavel_B
  if Variavel_B is null then
  begin
   insere
  end
  else
  begin
    atualiza
  end
end

Nao deixa Variavel_B com valor nulo, quando nao encontra o registro em B... 
e sim, o deixa com o valor de uma ultima interação do for select.

Isso é correto?

Resolvi o problema reiniciando Variavel_B no final do For Select. Mas fiquei 
com a pulga atraás da orelha.


[]'s

Francisco Thiago de Almeida

"Se é verdade que todos os caminhos levam a Deus, porque será que nem todas 
estradas levam ao mesmo lugar?"

Para que possam entender, estou enviando a procedure abaixo.

CREATE PROCEDURE GRAVA_FILIAL (
       P_CNPJ VARCHAR(14)
     , P_DATA_CONSULTA DATE
     , P_CODIGO_USER INTEGER
     , P_CODIGO_PROP INTEGER
     , P_EMPR_CODIGO INTEGER
     , P_PARECER_OPERADOR BLOB SUB_TYPE 1 SEGMENT SIZE 80
     , P_PARECER_PROPRIETARIO BLOB SUB_TYPE 1 SEGMENT SIZE 80
     , P_AUTORIZADO CHAR(1))
AS
DECLARE VARIABLE V_CON_CODIGO INTEGER;
DECLARE VARIABLE V_CLI_CODIGO INTEGER;
BEGIN
  FOR SELECT CLIENTE.CLI_CODIGO
      FROM CLIENTE
      WHERE SUBSTRING(CLIENTE.CLI_CNPJ FROM 1 FOR 8) = SUBSTRING(:P_CNPJ 
FROM 1 FOR 8)
      INTO :V_CLI_CODIGO

  DO
  BEGIN
    SELECT CONSULTAS.CLI_CODIGO
    FROM CONSULTAS
    WHERE CONSULTAS.CLI_CODIGO = :V_CLI_CODIGO
    INTO :V_CON_CODIGO;

    IF (V_CON_CODIGO IS NULL) THEN
    BEGIN
      INSERT INTO CONSULTAS(
             CLI_CODIGO
           , EMPR_CODIGO
           , CONS_DATACONSULTA
           , CONS_AUTORIZADO
           , CONS_PARECEROP
           , CONS_PARECERPROP
           , CUSU_CODIGO
           , CUSU_CODIGO_PROP
           , CONS_AUTORIZAOP
      ) VALUES ( :V_CLI_CODIGO
           , :P_EMPR_CODIGO
           , :P_DATA_CONSULTA
           , :P_AUTORIZADO
           , :P_PARECER_OPERADOR
           , :P_PARECER_PROPRIETARIO
           , :P_CODIGO_USER
           , :P_CODIGO_PROP
           , :P_AUTORIZADO);
    END
    ELSE
    BEGIN
      UPDATE CONSULTAS SET
           CONS_DATACONSULTA = :P_DATA_CONSULTA
         , CONS_AUTORIZADO = :P_AUTORIZADO
         , CUSU_CODIGO = :P_CODIGO_USER
         , CUSU_CODIGO_PROP = :P_CODIGO_PROP
         , EMPR_CODIGO = :P_EMPR_CODIGO
         , CONS_PARECEROP = :P_PARECER_OPERADOR
         , CONS_PARECERPROP = :P_PARECER_PROPRIETARIO
         , CONS_AUTORIZAOP = :P_AUTORIZADO
      WHERE CONSULTAS.CLI_CODIGO = :V_CON_CODIGO;
    END
    :V_CON_CODIGO = Null;
  END


		
_______________________________________________________ 
Yahoo! Mail - Sempre a melhor opção para você! 
Experimente já e veja as novidades. 
http://br.yahoo.com/mailbeta/tudonovo/
 






Mais detalhes sobre a lista de discussão lista