[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