Função para retornar campo

Dúvidas, dicas e truques de PL/SQL. Aqui também vão assuntos relacionados a pacotes, triggers, funções, Java-Stored Procedures, etc
Responder
mariogus
Rank: Analista Sênior
Rank: Analista Sênior
Mensagens: 157
Registrado em: Sex, 30 Nov 2007 1:17 pm
Localização: Porto Alegre - RS

Pessoal,

Preciso criar uma função para retornar um campo de uma tabela para o meu insert - alguém pode me dar uma dica? Fiz com esse cursor v_ClassesRecord.Dt_Inicio, --DT_INICIO ..- mas ele já faz diretamente o update - sendo que existem as datas de inicio de vigência para cada pfj_codigo.

Selecionar tudo

Código: 

 l_municipio VARCHAR2(20); 
 vn_recno    NUMBER; 

  BEGIN 
  
    BEGIN 
      
    FOR v_ClassesRecord IN (SELECT a.dt_inicio,a.dt_fim 
    FROM synchro.cor_pessoa_vigencia a,synchro.synitf_pessoa b 
    where a.dt_fim is null 
   and pi_pessoa.pfj_codigo = pfj_codigo;) 
    LOOP 
      
      SELECT COUNT(pfj_codigo) 
        INTO vn_recno 
        FROM synchro.synitf_pessoa 
       WHERE pi_pessoa.a1_cgc = cpf_cgc; 
    
  
      IF vn_recno = 0 THEN 
        
        INSERT INTO synchro.synitf_pessoa 
          (pfj_codigo, 
           codigo_usual, 
           mnemonico, 
           dt_inicio, 
           dt_fim, 
           ) 
        VALUES 
          (pi_pessoa.a1_cgc, --pfj_codigo 
           pi_pessoa.a1_cod, --codigo_usual 
           pi_pessoa.a1_nome, --mnemonico                  
           pi_pessoa.a1_pessoa, --ind_fisica_juridica 
           v_ClassesRecord.Dt_Inicio, --DT_INICIO 
           NULL, --DT_FIM " 
           ); 
            
      ELSE 
        UPDATE synchro.synitf_pessoa 
           SET pfj_codigo               = pi_pessoa.a1_cgc, 
               codigo_usual             = pi_pessoa.a1_cod, 
               mnemonico                = pi_pessoa.a1_nreduz, 
               ind_fisica_juridica      = pi_pessoa.a1_pessoa, 
               dt_inicio                = trunc(sysdate), 
               dt_fim                   = trunc(sysdate), 
        where  trim(cpf_cgc)          = TRIM(pi_pessoa.a1_cgc); 
      
      END IF; 
      END LOOP; 
diegolenhardt
Moderador
Moderador
Mensagens: 1177
Registrado em: Qui, 15 Out 2009 10:28 am
Localização: Recife

Selecionar tudo

create or replace function minha_funcao (vparametro  number) return number is
  retorno    number;
begin
  select xxx
    into retorno
   from tabela
  where xx2 = vparametro;

  return retorno;
end;
select minha_funcao(1) from dual;

falows
mariogus
Rank: Analista Sênior
Rank: Analista Sênior
Mensagens: 157
Registrado em: Sex, 30 Nov 2007 1:17 pm
Localização: Porto Alegre - RS

Desculpe - não fui muito claro na minha explanação do que eu preciso - seria o seguinte a função abaixo que está funcionando - o que preciso fazer é inserir o resultado dela em um campo no insert que é o próximo código que coloquei de exemplo.

Code1

Selecionar tudo

Código: 
CREATE OR REPLACE FUNCTION cor_vigencia (vigencia_pfj_codigo_in 
IN synchro.cor_pessoa_vigencia.pfj_codigo%TYPE) 
RETURN synchro.cor_pessoa_vigencia.dt_inicio%TYPE 
IS 
    v_dt_inicio  synchro.cor_pessoa_vigencia.dt_inicio%TYPE; 
BEGIN 
   SELECT dt_inicio 
      INTO v_dt_inicio 
      FROM synchro.cor_pessoa_vigencia 
      WHERE pfj_codigo = vigencia_pfj_codigo_in 
      and dt_fim is null; 

    RETURN v_dt_inicio; 
EXCEPTION 
    WHEN NO_DATA_FOUND 
    THEN 
       /* Retorna o registro. */ 
       RETURN v_dt_inicio; 
END cor_vigencia; 
Code2

Selecionar tudo

Código: 
INSERT INTO synchro.synitf_pessoa 
          (pfj_codigo, 
           codigo_usual, 
           mnemonico, 
           dt_inicio, 
           dt_fim, 
           ) 
        VALUES 
          (pi_pessoa.a1_cgc, --pfj_codigo 
           pi_pessoa.a1_cod, --codigo_usual 
           pi_pessoa.a1_nome, --mnemonico                  
           pi_pessoa.a1_pessoa, --ind_fisica_juridica 
           v_ClassesRecord.Dt_Inicio, --DT_INICIO 
           NULL, --DT_FIM " 
           ); 
            
      ELSE 
        UPDATE synchro.synitf_pessoa 
           SET pfj_codigo               = pi_pessoa.a1_cgc, 
               codigo_usual             = pi_pessoa.a1_cod, 
               mnemonico                = pi_pessoa.a1_nreduz, 
               ind_fisica_juridica      = pi_pessoa.a1_pessoa, 
               dt_inicio                = trunc(sysdate), 
               dt_fim                   = trunc(sysdate), 
        where  trim(cpf_cgc)          = TRIM(pi_pessoa.a1_cgc); 
      
      END IF;  
diegolenhardt
Moderador
Moderador
Mensagens: 1177
Registrado em: Qui, 15 Out 2009 10:28 am
Localização: Recife

Se fosse o

Digamos que fosse o DT_FIM,

Selecionar tudo

VALUES
          (pi_pessoa.a1_cgc, --pfj_codigo
           pi_pessoa.a1_cod, --codigo_usual
           pi_pessoa.a1_nome, --mnemonico                 
           pi_pessoa.a1_pessoa, --ind_fisica_juridica
           v_ClassesRecord.Dt_Inicio, --DT_INICIO
           cor_vigencia(pi_pessoa.a1_cgc) --DT_FIM "
           ); 
Responder
  • Informação
  • Quem está online

    Usuários navegando neste fórum: Nenhum usuário registrado e 5 visitantes