Sql Dinâmico

Dicas do Oracle Forms Builder - Blocos, Itens, LOV, Canvas, Triggers, comandos, PLL, d2kwutil, FMB, Alert, menus, etc
Responder
rafaellomba
Rank: Programador Júnior
Rank: Programador Júnior
Mensagens: 21
Registrado em: Ter, 14 Ago 2007 9:39 am
Localização: Rio de Janeiro - RJ
Rafael Lomba

É possível utilizar SQL Dinâmico no Forms 9 e 10?

estou usando sql dinamico assi:

Selecionar tudo

OPEN C1 FOR CONSULTA;
FETCH C1 INTO SAIDA;
CLOSE C1;
Porque estou usando em um código e quando mando compilar ele me diz que 'esse recurso não é aceito em programas do lado cliente'.

Algué me ajuda por favorrrrrrrrrrr[/code]
rafaellomba
Rank: Programador Júnior
Rank: Programador Júnior
Mensagens: 21
Registrado em: Ter, 14 Ago 2007 9:39 am
Localização: Rio de Janeiro - RJ
Rafael Lomba

Pessoal,

Já consegui resolver o meu problema. Não da pra executar SQL dinamico no forms. Criei uma função no banco pra poder executar o SQL dinamico.

Mesmo assim obrigado
suelana
Rank: Programador Sênior
Rank: Programador Sênior
Mensagens: 63
Registrado em: Qui, 10 Ago 2006 6:07 pm
Localização: Joinville-SC
Suelana BLU-JLLE

Eu consegui sem usar uma variável VARCHAR2 para armazenar o query de consulta. Eis o código:

Selecionar tudo

DECLARE
  --
  type tpC01 is REF CURSOR;
  cur01 tpC01;
  --
  v_Sql  varchar2(255);
  vcd_profissional  number(9);
  vnm_profissional  varchar2(60);
  -- ...
	--
  w_contador_registro		NUMBER := 0;  
  w_arquivo    					text_io.file_type;
  alert_button					NUMBER;
	--
BEGIN
  --v_Sql := 'select t.cd_profissional, t.nm_profissional from profissional t';
	-- ================================
	alert_button := Show_Alert('CONFIRMA');      
  --
  IF alert_button = ALERT_BUTTON1 THEN	
		--
		set_application_property(cursor_style,'BUSY');
		--
	  -- Geração do arquivo
		:prof.dsp_nome_arquivo := 'Mailling\SEGMENTACAO_PMT' || to_char(sysdate,'ddmmyyyy') ||'.txt';		
	
	  OPEN cur01 FOR select t.cd_profissional, t.nm_profissional from profissional t;
	  --OPEN cur01 FOR v_Sql;
    LOOP
	  	FETCH cur01 into vcd_profissional,vnm_profissional;	  
	    EXIT WHEN cur01%NOTFOUND;
	    	
			w_contador_registro := w_contador_registro + 1;
	    --  
	    IF w_contador_registro = 1 THEN
	      	
	       w_arquivo := text_io.fopen(:prof.dsp_nome_arquivo, 'W');
	        
	       text_io.put_line(w_arquivo, 'CD_PROFISSIONAL;'||                                     
                                     'NM_PROFISSIONAL;');
	
	    END IF;
			text_io.put_line(w_arquivo,	vcd_profissional||';'||vnm_profissional);
    END LOOP;
    --
	  CLOSE cur01;	  
	  text_io.fclose(w_arquivo);   
	  --
	  set_application_property(cursor_style,'DEFAULT');	
	  --
	  IF w_contador_registro = 0 THEN
	    mensagem('Nenhum registro foi gravado no arquivo.', 'Aviso', 'C','N');
	  ELSE
	    mensagem(w_contador_registro||' registro(s) gravados(s) com sucesso no arquivo ' || :prof.dsp_nome_arquivo || '.', 'Geração de Arquivo', 'N', 'N');
	  END IF;
	
	  :system.message_level := 0;
  END IF;
  --
EXCEPTION
  WHEN OTHERS THEN
    ROLLBACK;
    text_io.fclose(w_arquivo);
    set_application_property(cursor_style,'DEFAULT');
    mensagem('Erro ao Gerar os dados no Arquivo-'||:prof.dsp_nome_arquivo||SQLERRM, 'Erro', 'S', 'S');
END;
Talvez uma query mais complexa não dê para usar desta forma.
Vou fazer um teste depois.

Gostaria de saber porq quando usava a variável v_Sql contendo o query, ao compilar acusava erro na linha q abre o cursor (OPEN cur01 FOR v_Sql;).
Responder
  • Informação
  • Quem está online

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