Ir para conteúdo
Fórum Script Brasil

Rodrigo VF

Membros
  • Total de itens

    3
  • Registro em

  • Última visita

Sobre Rodrigo VF

Rodrigo VF's Achievements

0

Reputação

  1. Galera colocando um SELECT funciona... SELECT SINTE_EST01_SQL(...) Flwwww...
  2. Bom galera estou com problema quando tento passar uma tabela como parametro de uma funcao. já tentei varias opcoes q achei na net mas nenhuma deu certo. No caso abaixo preciso passar o resultado dos selects para a funcao SINTE_EST01_SQL e retornar o resultado. Se alguém puder me ajudar eu agradeço... essas funcoes são só como exemplo das que eu to fazendo!!! Flwwww!!! ---------------------------------- Funcao Primaria ------------------------------------ CREATE OR REPLACE FUNCTION SINTETIZA_SQL() RETURNS VOID AS $$ DECLARE D02 RECORD; A17 RECORD; X NUMERIC; BEGIN SELECT INTO D02 * FROM CAD02 WHERE CAD02.cdemp = '51' AND CAD02.nrped = '0172970' AND CAD02.cdexp = '10.1010.00010' AND sr_deleted = ''; SELECT INTO A17 * FROM FTA17 WHERE FTA17.cdemp = '51' AND FTA17.nrped = '0172970' AND FTA17.cdexp = '10.1010.00010' AND sr_deleted = ''; X := SINTE_EST01_SQL( D02, A17 ); END; $$ LANGUAGE 'PLPGSQL'; ---------------------------------- Funcao Secundaria ------------------------------------ CREATE OR REPLACE FUNCTION SINTE_EST01_SQL( D02 CAD02, A17 FTA17 ) RETURNS "text" AS $$ DECLARE cRET TEXT; BEGIN IF D02.controle = '47' THEN cRET := '1' ELSEIF A17.controle = '47' THEN cRET := '0' END IF; RETURN( nRET ); END; $$ LANGUAGE 'PLPGSQL';
  3. Bom pessoal sou novo aki no forum e novo também no pgsql... Mas no meu trabalho me passaram para fazer uma trigger... Como estou testando, não estou testando como trigger... Segue o script abaixo: CREATE OR REPLACE FUNCTION SINTETIZA_SQL() -- RETURNS TRIGGER AS RETURNS VOID AS $$ DECLARE D02 RECORD; A17 RECORD; G01 RECORD; D44 RECORD; B23 RECORD; B05 RECORD; B10 RECORD; B01 RECORD; nMULT NUMERIC; nMULTDEV NUMERIC; nCUSTOST NUMERIC; nMARGEM NUMERIC; nMARGEMC NUMERIC; nCOMISSAO NUMERIC; nDESPESA NUMERIC; nDESP_LJ NUMERIC; nYXPERDES NUMERIC; nREVERTE NUMERIC; nTMP_COD NUMERIC; nALIQUOTA NUMERIC; cCOMPRADOR VARCHAR; cSETOR VARCHAR; cANOMES VARCHAR; cCOMP_SET VARCHAR; NEW RECORD; OLD RECORD; TG_OP VARCHAR; BEGIN SELECT INTO NEW * FROM FTB02 WHERE FTB02.cdemp = '51' AND FTB02.nrped = '0172970' AND FTB02.cdexp = '10.1010.00010' AND sr_deleted = ''; SELECT INTO OLD * FROM FTB02 WHERE FTB02.cdemp = '51' AND FTB02.nrped = '0172970' AND FTB02.cdexp = '10.1010.00010' AND sr_deleted = ''; TG_OP := 'UPDATE'; IF TG_OP = 'DELETE' THEN IF OLD.cdope NOT IN ('001','002','500') THEN -- RETURN OLD; ELSE IF NEW.cdope NOT IN ('001','002','500') THEN -- RETURN NEW; END IF; END IF; END IF; IF OLD.controle IN ('41','42','49') AND NEW.controle NOT IN ('41','42','49') THEN nREVERTE := -1; ELSE nREVERTE := 1; END IF; IF ( ( OLD.controle IN ('41','42','49') AND NEW.controle IN ('41','42','49') ) OR OLD.controle = NEW.controle ) AND nREVERTE = 1 AND OLD.cdexp = NEW.cdexp AND OLD.dtmov = NEW.dtmov AND OLD.cdemp = NEW.cdemp AND OLD.qtmov = NEW.qtmov AND OLD.vltot = NEW.vltot AND OLD.vltot_jr = NEW.vltot_jr AND OLD.cod_trib = NEW.cod_trib AND OLD.vlpro = NEW.vlpro AND OLD.vlpro_jr = NEW.vlpro_jr AND OLD.alicm_nf = NEW.alicm_nf AND OLD.prvis = NEW.prvis AND OLD.vlnot = NEW.vlnot AND OLD.comis = NEW.comis AND OLD.vlcus = NEW.vlcus AND OLD.cstmt = NEW.cstmt THEN IF TG_OP = 'DELETE' THEN -- RETURN OLD; ELSE -- RETURN NEW; END IF; END IF; SELECT INTO D02 * FROM CAD02 WHERE CAD02.cdexp = NEW.cdexp AND sr_deleted = ''; SELECT INTO A17 * FROM FTA17 WHERE FTA17.cdemp = NEW.cdemp AND sr_deleted = ''; SELECT INTO G01 * FROM CGA01 WHERE CGA01.cdemp = NEW.cdemp AND sr_deleted = ''; SELECT INTO D44 * FROM CAD44 WHERE CAD44.familia = SUBSTR( NEW.cdexp, 1, 2 ) AND CAD44.grupo = SUBSTR( NEW.cdexp, 4, 4 ) AND sr_deleted = ''; SELECT INTO B23 * FROM FTB23 WHERE FTB23.cdemp = NEW.cdemp AND FTB23.nrped = NEW.nrped AND FTB23.cdexp = NEW.cdexp AND sr_deleted = ''; SELECT INTO B01 * FROM FTB01 WHERE FTB01.cdemp = NEW.cdemp AND FTB01.nrped = NEW.nrped AND sr_deleted = ''; SELECT INTO B05 * FROM FTB05 WHERE FTB05.cdfil = B01.cdfil AND FTB05.cdcli = B01.cdcli AND sr_deleted = ''; SELECT INTO B10 * FROM TAB10 WHERE TAB10.cdope = NEW.cdope AND sr_deleted = ''; -- Calculo do CustoST IF NEW.cstmt = 0 OR NEW.cstmt IS NULL THEN IF NEW.vlcus = 0 OR NEW.vlcus IS NULL THEN nCUSTOST := NEW.prvis * 0.55 * NEW.qtmov; ELSE nCUSTOST := NEW.vlcus * NEW.qtmov; END IF; ELSE nCUSTOST := NEW.cstmt * NEW.qtmov; END IF; -- Calculo da Aliquota IF NEW.cod_trib = 0 OR NEW.cod_trib IS NULL THEN nTMP_COD := D02.cod_trib; ELSE nTMP_COD := NEW.cod_trib; END IF; nALIQUOTA := ALIQUOTA_SQL( nTMP_COD, G01.uf, B05.estad, B05.tppes, B10.tipo ); -- Calculo da Comissao nYXPERDES := ( 100 - ( NEW.vlpro / NEW.prvis * 100 ) ); nCOMISSAO := RET_COM_SQL( D02.situa, SUBSTR( NEW.rapid, 1, 1 ), 'N', D02.comis, NEW.comis, NEW.dtmov, NEW.cdemp, NEW.cdexp, nYXPERDES ); -- Calculo das Despesas nDESPESA := DESP_VAR_SQL( NEW.cdemp, NEW.cdexp ); nDESP_LJ := DESP_VAR_SQL( G01.cdemp, '' ); -- Calculo das Margens nMARGEM := ( B23.mcvl * NEW.qtmov ) - ((( NEW.vlpro * NEW.qtmov ) / 100 ) * NEW.comis ); nMARGEMC := MARGEM_SQL( nDESPESA, nDESP_LJ, 'S', NEW.dtmov, NEW.cdexp, NEW.vltot, NEW.vltot_jr, NEW.vlcus, NEW.calc_mc, NEW.prvis, NEW.qtmov, D02.ctrep, D02.custo2, nYXPERDES, nCOMISSAO, nALIQUOTA ); -- Comprador e Setor cCOMP_SET := COMP_SET_SQL( NEW.cdexp ); cCOMPRADOR := SPLIT_PART( cCOMP_SET, '|', 2 ); cSETOR := SPLIT_PART( cCOMP_SET, '|', 1 ); -- 1ª ESTATISTICA SINTE_EST01_SQL( OLD.cdexp, OLD.cdemp, '', TG_OP, nCUSTOST, nCOMISSAO, nDESPESA, nMARGEM, nMARGEMC, cCOMPRADOR, cSETOR, OLD, NEW, D02, A17, G01, D44, B05, B23, nREVERTE ); -- 2ª ESTATISTICA SINTE_EST01_SQL( OLD.cdexp, OLD.cdemp, '999999', TG_OP, nCUSTOST, nCOMISSAO, nDESPESA, nMARGEM, nMARGEMC, cCOMPRADOR, cSETOR, OLD, NEW, D02, A17, G01, D44, B05, B23, nREVERTE ); -- 3ª ESTATISTICA SINTE_EST01_SQL( OLD.cdexp, '00', '', TG_OP, nCUSTOST, nCOMISSAO, nDESPESA, nMARGEM, nMARGEMC, cCOMPRADOR, cSETOR, OLD, NEW, D02, A17, G01, D44, B05, B23, nREVERTE ); -- 4ª ESTATISTICA SINTE_EST01_SQL( OLD.cdexp, '00', '999999', TG_OP, nCUSTOST, nCOMISSAO, nDESPESA, nMARGEM, nMARGEMC, cCOMPRADOR, cSETOR, OLD, NEW, D02, A17, G01, D44, B05, B23, nREVERTE ); -- 5ª ESTATISTICA SINTE_EST01_SQL( '0000000000000', OLD.cdemp, '', TG_OP, nCUSTOST, nCOMISSAO, nDESPESA, nMARGEM, nMARGEMC, cCOMPRADOR, cSETOR, OLD, NEW, D02, A17, G01, D44, B05, B23, nREVERTE ); END; $$ LANGUAGE 'PLPGSQL'; Segue erro que estao acontecendo: ERROR: syntax error at or near "SINTE_EST01_SQL" at character 1 QUERY: SINTE_EST01_SQL( $1 , $2 , '', $3 , $4 , $5 , $6 , $7 , $8 , $9 , $10 , $11 , $12 , $13 , $14 , $15 , $16 , $17 , $18 , $19 ) CONTEXT: SQL statement in PL/PgSQL function "sintetiza_sql" near line 178 Se alguém puder me ajudar, agradeço!!! Flwwww...
×
×
  • Criar Novo...