PASSAR TABELA VARIAVEL EM FUNÇÃO

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
dacarfre
Rank: Estagiário Júnior
Rank: Estagiário Júnior
Mensagens: 2
Registrado em: Seg, 23 Jan 2017 3:45 pm

Amigos, boa tarde.

Pesquisei em vários lugares, porém, não encontrei sinais de solução.

Necessidade: Passar nome da tabela na entrada da FUNÇÃO e COMPILAR

Possuo uma PROC que lê um arquivo e insere o dados em uma devida tabela, porém essa tabela é criada quando se inicia a PROC, ou seja, a tabela não tem um nome fixo, porque eu utilizo a data e hora para diferenciar o arquivo.
ex.: FILE_20170123170001

Selecionar tudo

SELECT TO_CHAR(SYSDATE, 'DDMMYYYHHMMSS') INTO V_NM_TABLE FROM DUAL;

Selecionar tudo

 V_NM_TABLE := 'FILE_'||V_NM_TABLE ;
Posteriormente a inserção desses registros, eu devo manipular alguns dados e para isso utilizo uma função na qual preciso passar o nome da tabela que que criei, para que ela possa fazer o select e fins devidos.

A função está criada e funciona quando a tabela EXISTE no BD, segue função abaixo:

Selecionar tudo

CREATE OR REPLACE FUNCTION NOME_FUNCAO (CPF IN VARCHAR2, [b]NM_TABELA[/b] IN VARCHAR2)
RETURN VARCHAR2
...

BEGIN
...
For rCli in (    
                
                Select TELEFONE,CPFCGC from [b]NM_TABELA[/b] where  CPFCGC = documento and ROWNUM <= 30 
                               
)  
LOOP
...
END LOOP;

... 
END;
Existe algum jeito de validar a função para isso?

Eu tentei fazer o seguinte: Criei a tabela, e testei a função, td certo! Depois apaguei a tabela e inseri a variavel, ai falho! então como não tinha nada a perder, criei a tabela com o nome da função, deu certo! compilei a função, deu certo! ai apaguei a tabela e tentei usar a função, rsrs... deu erro dizendo que a função está inválida. Enfim, não sei mais o que fazer.

Se alguém puder me ajuda, desde já, obrigado.
spernega
Rank: DBA Pleno
Rank: DBA Pleno
Mensagens: 232
Registrado em: Ter, 19 Jun 2007 2:12 pm
Localização: São Paulo - SP

Bom dia,

Eu não entendi exatamente o que você esta fazendo, mas tenta uma função mais ou menos assim:

Selecionar tudo

CREATE OR REPLACE FUNCTION NOME_FUNCAO (CPF IN VARCHAR2, NM_TABELA IN VARCHAR2)
RETURN VARCHAR2
 -- 
 type tpteste is REF CURSOR;
 c  tpTeste;
 --
 v_telefone varchar2(20);
 v_cpfcgc   varchar2(20);
 --
 vSQL VARCHAR2(255);
BEGIN
  --
  vSQL := 'Select TELEFONE,CPFCGC from '||NM_TABELA||' where CPFCGC = documento and ROWNUM <= 30 ';
  --
  open c for vSQL;
   loop
    fetch c into v_telefone, v_cpfcgc;
     exit when c%notfound;
      DBMS_OUTPUT.PUT_LINE(v_telefone||v_cpfcgc);
   end loop;
  close c;
END;
dacarfre
Rank: Estagiário Júnior
Rank: Estagiário Júnior
Mensagens: 2
Registrado em: Seg, 23 Jan 2017 3:45 pm

Excelente meu amigo.... era exatamente isso que eu precisava...

Muito obrigado.
Responder
  • Informação
  • Quem está online

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