Fórum Insert em Tabelas diferentes #26928
20/08/2008
0
Pessoas,
Tenho a seguinte missão:
Estou criando um botão onde faz a cópia de um registro já existente.
Este registro, vou chamar de Projeto, contém Fases.
As Fases contém Linhas.
Onde eu estou ´boiando´
Não sei como fazer para quando eu clicar no botão, o select fazer a cópia da fase e de todas as suas linhas e verificar se há mais fases(e se houver, copiar suas linhas também).
Estou aprendendo ainda a mexer com While, mas, não sei se é por este caminho.
Chaves primárias:
Project_ID
ProjectPhase_ID
ProjectLine_ID
Poderiam ajudar?
Obrigado.
Tenho a seguinte missão:
Estou criando um botão onde faz a cópia de um registro já existente.
Este registro, vou chamar de Projeto, contém Fases.
As Fases contém Linhas.
Onde eu estou ´boiando´
Não sei como fazer para quando eu clicar no botão, o select fazer a cópia da fase e de todas as suas linhas e verificar se há mais fases(e se houver, copiar suas linhas também).
Estou aprendendo ainda a mexer com While, mas, não sei se é por este caminho.
Chaves primárias:
Project_ID
ProjectPhase_ID
ProjectLine_ID
Poderiam ajudar?
Obrigado.
Duley
Curtir tópico
+ 0
Responder
Posts
20/08/2008
Duley
Estou usando o Seguinte SQL também, mas, não está funfando... o que falta?
CREATE OR REPLACE FUNCTION adempiere.project_copy (p_c_project_id numeric) RETURNS bool AS
´
declare vProject_Destino_IDnumeric(10);
declarevProject_Origem_IDnumeric(10);
begin
UPDATE AD_PInstance
SET Created = now(),
IsProcessing = ´´Y´´
WHERE AD_PInstance_ID=p_c_project_id;
SELECT Record_ID INTO vProject_Destino_ID FROM AD_PInstance WHERE AD_PInstance_ID = p_c_project_id;
SELECT P_Number INTO vProject_Origem_ID FROM AD_PInstance_Para WHERE ParameterName = ´´C_Project_ID´´ AND AD_PInstance_ID = p_c_project_id;
DELETE FROM C_Projectline WHERE C_ProjectPhase_ID = (select C_ProjectPhase_ID from C_ProjectPhase where C_Project_ID = vProject_Destino_ID);
DELETE FROM C_ProjectPhase WHERE C_Project_ID = vProject_Destino_ID;
LOOP
INSERT INTO C_ProjectPhase
(C_ProjectPhase_ID, AD_Client_ID, AD_Org_ID, IsActive, Created, CreatedBy, Updated,
UpdatedBy, SeqNo, C_Project_ID, qty, Description, name, projinvoicerule)
SELECT sq_c_projectphase(), pp.AD_Client_ID, pp.AD_Org_ID, pp.IsActive, now(), 100, now(), 100,
pp.SeqNo, vProject_Destino_ID, pp.qty, pp.Description, pp.name, projinvoicerule
FROM C_ProjectPhase pp
WHERE pp.C_Project_ID = vProject_Origem_ID;
LOOP
INSERT INTO C_ProjectLine
(C_ProjectLine_ID, AD_Client_ID, AD_Org_ID, IsActive, Created, Createdby, Updated,
UpdatedBy, Line, C_ProjectPhase_ID, Description, plannedqty, M_Product_ID)
SELECT sq_c_projectline(), pl.AD_Client_ID, pl.AD_Org_ID, pl.IsActive, now(), 100, now(), 100,
pl.Line, pl.C_ProjectPhase_ID, pl.Description, pl.plannedqty, pl.M_Product_ID
FROM C_ProjectLine pl
WHERE pl.C_ProjectPhase_ID = (select c_projectphase_id from c_projectphase where c_project_id = vProject_Origem_ID);
END LOOP;
END LOOP;
UPDATE AD_PInstance
SET Updated = now(),
IsProcessing = ´´N´´
WHERE AD_PInstance_ID=p_c_project_id;
RETURN(true);
end;
´
LANGUAGE ´plpgsql´
GO
CREATE OR REPLACE FUNCTION adempiere.project_copy (p_c_project_id numeric) RETURNS bool AS
´
declare vProject_Destino_IDnumeric(10);
declarevProject_Origem_IDnumeric(10);
begin
UPDATE AD_PInstance
SET Created = now(),
IsProcessing = ´´Y´´
WHERE AD_PInstance_ID=p_c_project_id;
SELECT Record_ID INTO vProject_Destino_ID FROM AD_PInstance WHERE AD_PInstance_ID = p_c_project_id;
SELECT P_Number INTO vProject_Origem_ID FROM AD_PInstance_Para WHERE ParameterName = ´´C_Project_ID´´ AND AD_PInstance_ID = p_c_project_id;
DELETE FROM C_Projectline WHERE C_ProjectPhase_ID = (select C_ProjectPhase_ID from C_ProjectPhase where C_Project_ID = vProject_Destino_ID);
DELETE FROM C_ProjectPhase WHERE C_Project_ID = vProject_Destino_ID;
LOOP
INSERT INTO C_ProjectPhase
(C_ProjectPhase_ID, AD_Client_ID, AD_Org_ID, IsActive, Created, CreatedBy, Updated,
UpdatedBy, SeqNo, C_Project_ID, qty, Description, name, projinvoicerule)
SELECT sq_c_projectphase(), pp.AD_Client_ID, pp.AD_Org_ID, pp.IsActive, now(), 100, now(), 100,
pp.SeqNo, vProject_Destino_ID, pp.qty, pp.Description, pp.name, projinvoicerule
FROM C_ProjectPhase pp
WHERE pp.C_Project_ID = vProject_Origem_ID;
LOOP
INSERT INTO C_ProjectLine
(C_ProjectLine_ID, AD_Client_ID, AD_Org_ID, IsActive, Created, Createdby, Updated,
UpdatedBy, Line, C_ProjectPhase_ID, Description, plannedqty, M_Product_ID)
SELECT sq_c_projectline(), pl.AD_Client_ID, pl.AD_Org_ID, pl.IsActive, now(), 100, now(), 100,
pl.Line, pl.C_ProjectPhase_ID, pl.Description, pl.plannedqty, pl.M_Product_ID
FROM C_ProjectLine pl
WHERE pl.C_ProjectPhase_ID = (select c_projectphase_id from c_projectphase where c_project_id = vProject_Origem_ID);
END LOOP;
END LOOP;
UPDATE AD_PInstance
SET Updated = now(),
IsProcessing = ´´N´´
WHERE AD_PInstance_ID=p_c_project_id;
RETURN(true);
end;
´
LANGUAGE ´plpgsql´
GO
Responder
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)