0

我想将数据写入位置文件。只有以前没有写入文件的数据才会被写入。显然,表中有一个列来确定数据是否之前写入过。

就我而言,假设字段长度为 80,但数据长度为 30,则其余空间将被空格填充。例如,

----------------------------------------
|  Name    |    SSN      |  Integrated |
----------------------------------------
| Doe      |  453214     |     Y       |
| John     |  1234567890 |     N       |
| Scarlett |  123        |     N       |
----------------------------------------

第一条记录已传输/写入先前的文件。因此,它不会在下一个文件中传输。名称的长度固定为 80 个字符。因此,如果名称少于 80 个字符,则其余空间将由空格填充。它看起来像这样。其他领域也是如此

Name           SSN         
John           1234567890
Scarlett       123

我该怎么做?提前致谢。我正在使用 oracle 11g。

编辑

好的,我可以编写代码。但是,我想将此代码称为可以在 dbms_jobs 中使用的过程。问题是我不知道如何编写程序。

DECLARE
    v_file UTL_FILE.file_type;
BEGIN
    v_file := UTL_FILE.fopen('DIR_VR_AD_INTEGRATION', 'HRMtoAD1_'||sysdate, 'w', 32767);

    FOR x IN (select * from (select RPAD(user_id, 7, ' ') || ' ' || RPAD(pid_company_id, 10, ' ') str from arc_hrvr.vr_ad_integration where integrated = 'N') str where rownum <= 3 order by rownum)
    LOOP
        BEGIN
            UTL_FILE.put_line(v_file, x.str);
         END;
     END LOOP;

    UTL_FILE.fflush(v_file);
    UTL_FILE.fclose(v_file);
END;
4

1 回答 1

1

现在,这与您开始时的内容以及标题的方式确实是一个不同的问题。很高兴您已经弄清楚了您需要做的大部分事情,但这应该是一个单独的问题。但是,那将是相当模糊的,所以我不妨在这里尝试一下...

关于程序编写的文档相当清楚,并且有很多例子,例如这个是谷歌第一次点击“oracle create procedure”的例子。

目前您有一个匿名 PL/SQL 块,因此您需要将其转换为存储过程。在这种情况下,假设您不希望它成为包的一部分,您只需将其更改DECLARECREATE PROCEDURE my_procedure_name AS

CREATE PROCEDURE my_procedure_name AS
    v_file UTL_FILE.file_type;
BEGIN
   ...
END;
/
于 2012-07-24T11:53:52.430 回答