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