Marcelo,
 
Não existe Macro Substituição em Oracle (dá-lhe clipper), eu penso em duas 
alternativas, e entre as duas, prefiro a 2a.
 
1)
vSQL :=     'SELECT /*+ INDEX(F2 SF2010A) */ SUM(F2_VALFAT)VALFAT '||
                 'INTO ('||'nZM_FAT' || 
TO_CHAR(ADD_MONTHS(SYSDATE,nLoop),'MON'))'||
                 '  FROM SF2010 F2 '||
                 ' WHERE D_E_L_E_T_ = ' ' '||
                 ' AND F2_TIPO = ''N'''|| 
                 'AND SUBSTR(F2_EMISSAO,1,6) = '||
                 (TO_CHAR(ADD_MONTHS(SYSDATE,-(nLoop)),'YYYYMM')) || 
                ' AND F2_LOJA = IN_A1_LOJA '||
                ' AND F2_CLIENTE = IN_A1_COD;';
 
execute immediate vSQL;
 
Verifique a questão de sintaxe, e quotes.....
 
2) 
 
if  TO_CHAR(ADD_MONTHS(SYSDATE,nLoop),'MON')) = 1
  SELECT /*+ INDEX(F2 SF2010A) */ SUM(F2_VALFAT)VALFAT
  INTO nZM_FATJAN
  ...
elsif  TO_CHAR(ADD_MONTHS(SYSDATE,nLoop),'MON')) = 2 
  SELECT /*+ INDEX(F2 SF2010A) */ SUM(F2_VALFAT)VALFAT
  INTO nZM_FATFEV
 ...
elsif ...
end if;
 
A sintaxe pode estar errada, verifique a mesma.
 
Eu prefiro a 2a por causa do não uso do SQL Dinâmico, sempre que possível, 
prefiro usar SQL estático e bem bindado (lembre-se das binds) ;-).
 
Atenciosamente,

Anderson Haertel Rodrigues
Administrador de Banco de Dados
Florianópolis/SC - [EMAIL PROTECTED] 

-----Mensagem original-----
De: oracle_br@yahoogrupos.com.br [mailto:[EMAIL PROTECTED] nome de Marcelo
Enviada em: terça-feira, 22 de agosto de 2006 14:16
Para: oracle_br@yahoogrupos.com.br
Assunto: [oracle_br] Converter String em variável.



Olá pessoal,

Estou com uma dúvida na montagem de uma procedure que faz atualização de
faturamento.
O que eu preciso é conseguir converter uma string numa variável em tempo de
execução.
Por exemplo:
Tenho 12 variáveis, uma para cada mês do ano.
nZM_FATJAN number;
nZM_FATFEV number;
nZM_FATMAR number;
.....
nZM_FATDEZ number;
nLoop Number := 1;

O que tenho intenção de fazer é transformar a string ('nZM_FAT' ||
TO_CHAR(ADD_MONTHS(SYSDATE,-9),'MON')) nas variáveis já declaradas.
Em outras linguagens de programação usa-se o '&' para converter em linha de
código. Mas não sei qual seria para PL/SQL.
While(nLoop < 13) Loop
     
    SELECT /*+ INDEX(F2 SF2010A) */ SUM(F2_VALFAT)VALFAT
      INTO ('nZM_FAT' || TO_CHAR(ADD_MONTHS(SYSDATE,nLoop),'MON'))
      FROM SF2010 F2 
     WHERE D_E_L_E_T_ = ' ' 
       AND F2_TIPO = 'N' 
       AND SUBSTR(F2_EMISSAO,1,6) =
(TO_CHAR(ADD_MONTHS(SYSDATE,-(nLoop)),'YYYYMM'))  
       AND F2_LOJA = IN_A1_LOJA 
       AND F2_CLIENTE = IN_A1_COD;
       nLoop := nLoop + 1;
  End Loop;

Agradeço qualquer sugestão.


Marcelo Alberto Lauschner 
Depto. De Informática
Auto Pratense Ltda
* - Fax: (0XX54) 3242-3615
* - E-mail:  <mailto:[EMAIL PROTECTED]>
[EMAIL PROTECTED]
  



[As partes desta mensagem que não continham texto foram removidas]

 



[As partes desta mensagem que não continham texto foram removidas]



--------------------------------------------------------------------------------------------------------------------------
Atenção! As mensagens deste grupo são de acesso público e de inteira 
responsabilidade de seus remetentes.
Acesse: http://www.mail-archive.com/oracle_br@yahoogrupos.com.br/ 
--------------------------------------------------------------------------------------------------------------------------__________________________________________________________________

OPORTUNIDADES DE TRABALHO, VAGAS, EMPREGOS PARA PROFISSIONAIS ORACLE VISITE: 
http://www.oraclebr.com.br/
__________________________________________________________________
Este Grupo recebe o apoio da SQL Magazine - www.devmedia.com.br/sqlmagazine  
Links do Yahoo! Grupos

<*> Para visitar o site do seu grupo na web, acesse:
    http://br.groups.yahoo.com/group/oracle_br/

<*> Para sair deste grupo, envie um e-mail para:
    [EMAIL PROTECTED]

<*> O uso que você faz do Yahoo! Grupos está sujeito aos:
    http://br.yahoo.com/info/utos.html

 


Responder a