【问题标题】:How to open direct CSV file using TEXT_IO in oracle forms?如何在 oracle 表单中使用 TEXT_IO 打开直接 CSV 文件?
【发布时间】:2019-01-23 17:00:23
【问题描述】:

我在触发器 WHEN-BUTTON-PRESSED 上将此代码应用于 oracle 表单 10g。此代码仅将文件保存在目标位置。

代码:

PROCEDURE GEN_EXCEL IS

 IN_FILE TEXT_IO.FILE_TYPE;
 VC_HEAD Varchar2(32000);
 vc_file_path Varchar2(50) := 'C:\';

BEGIN

 IN_FILE := TEXT_IO.FOPEN(vc_file_path||'Test'||'.CSV','W'); 
 TEXT_IO.PUT_LINE(IN_FILE,'YOUR_TITLE'||chr(10));
 VC_HEAD := 'header1,header2,header3,header4';

 TEXT_IO.PUT_LINE(IN_FILE,VC_HEAD);
 FOR C1 IN ( SELECT column1, column2, column3, column4
             FROM Table_name)
 LOOP
   TEXT_IO.PUT_LINE(IN_FILE,C1.col1||','||C1.col2||','||C1.col3||','||C1.col4);

 END LOOP;

 TEXT_IO.FCLOSE(IN_FILE);
 MESSAGE('Excel file has been created!');
 MESSAGE('Excel file has been created!');

 EXCEPTION
  WHEN Others THEN
 TEXT_IO.FCLOSE(IN_FILE);
 MESSAGE('Error while writing file.');
 MESSAGE('Error while writing file.');
 END;

我想在按下按钮时直接从 oracle 表单打开 CSV 文件

如何实现这个目标?

【问题讨论】:

标签: oracle oracle10g oracleforms


【解决方案1】:

您可以使用 webutil 来执行此操作。 它有一个函数client_host

您也可以在第一条消息之后放置pause,而不是重复您的消息。那么你不需要第二条消息来弹出消息。

【讨论】:

    【解决方案2】:

    如果您想读入您的 .csv 文件,我已经为我的问题找到了合适的解决方案。

    如果我确实理解了你想要的,也许它对你也有帮助。

    Reading From File 
    March 19, 2009
    --------------------------------------------------
    Declare
      vfilename varchar2(500);
      in_file   Client_Text_IO.File_Type;
      linebuf   VARCHAR2(1800); 
    BEGIN
        vfilename := client_get_file_name('c:/temp/', File_Filter=>'Comma Dialimeted Files (*.csv)|*.csv|'); 
        in_file := client_Text_IO.Fopen(vfilename, 'r');  
        GO_BLOCK('Emp'); 
        FIRST_RECORD;  
      LOOP
        Client_Text_IO.Get_Line(in_file, linebuf); 
        p_output_line(linebuf);
        Client_Text_IO.New_Line; 
        Next_record; 
      END LOOP; 
       FIRST_RECORD;
    EXCEPTION
      WHEN no_data_found THEN
        Client_Text_IO.Put_Line('Closing the file...');
        Client_Text_IO.Fclose(in_file);
    END;
    -------------------------------------------------------
    PROCEDURE p_output_line(p_line varchar2) IS 
    vLINE VARCHAR2(4000);
    vVALUE VARCHAR2(1000); 
    vCOMMA_COUNT NUMBER;
    vREPORT_DATE DATE;
    BEGIN                    
     vLINE := p_line;
     vCOMMA_COUNT := LENGTH(vLINE)- LENGTH(REPLACE(vLINE,',','')); -- COUNT THE NUMBER OF COMMAS
      FOR I IN 1.. vCOMMA_COUNT+1 LOOP  
       vVALUE := SUBSTR(vLINE,1,INSTR(vLINE,',')-1);                             -- IF vLINE = 123,ABC,9877 THEN VVALUE WILL BE  123
        IF vVALUE IS NULL THEN
            vVALUE := vLINE;
        END IF;    
       vLINE := SUBSTR(vLINE,INSTR(vLINE,',')+1) ;                              -- CHANGE   123,ABC,9877 TO BE   ABC,9877  
       IF I = 1 THEN 
        :DATA.BMK_NAME := vVALUE; 
       ELSIF I = 2 THEN 
        vREPORT_DATE := last_day(to_date(vVALUE,'dd-mm-yyyy')); 
        :DATA.REPORT_DATE := vREPORT_DATE;
       ELSIF I = 3 THEN                 
        :DATA.BMK_RETURN := to_number(vVALUE);
       END IF;
      END LOOP; 
      EXCEPTION
        WHEN NO_DATA_FOUND THEN
        MESSAGE('Please Check the data type is appropriate on you excel file');
        MESSAGE('Please Check the data type is appropriate on you excel file');
    END; 
    -----------------------------------------------------------------------
    -- notes
    1- you must install webutil version 106 or later
    2- make sure that you attached and compiled the webutill.pll scucessfuly
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-10-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多