Monday, 1 March 2010

Dynamic SQL on forms 10g


Here is an example of exec_sql on forms 10g:

PROCEDURE ejemplo1 IS

campo1 varchar2(11);
campo2 varchar2(100);
campo3  varchar2(6);

source_connid EXEC_SQL.ConnType;
destination_connid EXEC_SQL.ConnType;
source_cursor EXEC_SQL.CursType;
destination_cursor EXEC_SQL.CursType;
ignore PLS_INTEGER;

BEGIN
 
 Go_block('srl2');
 first_record;  
 set_block_property('srl2',insert_allowed, property_true);

  begin
   source_connid := EXEC_SQL.DEFAULT_CONNECTION;
     source_cursor := EXEC_SQL.OPEN_CURSOR(source_connid);
   
   EXEC_SQL.PARSE(source_connid, source_cursor,
   'select campo1, campo2, campo3 from mi_tabla
    where rownum < 11 '
                  );
   EXEC_SQL.DEFINE_COLUMN(source_connid, source_cursor, 
   1, campo1, 11); 
   EXEC_SQL.DEFINE_COLUMN(source_connid, source_cursor, 
   2, campo2, 100); 
   EXEC_SQL.DEFINE_COLUMN(source_connid, source_cursor, 
   3, campo3, 11); 
   ignore := EXEC_SQL.EXECUTE(source_connid,
             source_cursor);   

  LOOP
      IF EXEC_SQL.FETCH_ROWS(source_connid, source_cursor) > 0 THEN

      EXEC_SQL.COLUMN_VALUE(source_connid, source_cursor,
      1,campo1);
       EXEC_SQL.COLUMN_VALUE(source_connid, source_cursor,
      2,campo2);
      EXEC_SQL.COLUMN_VALUE(source_connid, source_cursor,
      3,campo3);
    
      next_record;

    ELSE
                                 
      EXIT;
                             
    END IF;

END LOOP;

  EXEC_SQL.CLOSE_CURSOR(source_connid, source_cursor);
  EXEC_SQL.CLOSE_CONNECTION(source_connid);

exception when others then

      begin
        EXEC_SQL.CLOSE_CURSOR(source_connid,
        source_cursor);
      exception when others then null;
      end;
      begin
        EXEC_SQL.CLOSE_CONNECTION(source_connid);
      exception when others then null;
      end;
      show_message('Error:'||sqlerrm,'E',true);

  end; 

END;

No comments:

Post a Comment