我想在位置文件中写入数据。只会写入以前未在文件中写入的数据。显然,表中有一列用于确定数据是否已经写过。
就我而言,如果字段长度为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;
答案 0 :(得分:1)
这实际上是一个与你开始时不同的问题,以及它的标题。你已经弄清楚了你需要做的大部分事情,这很好,但这应该是一个单独的问题。然而,这本来是相当模糊的,所以我不妨在这里做一下......
关于程序编写的documentation非常清楚,并且有很多例子,例如this one,这是Google首次针对'oracle create procedure'打出的。
目前您有一个匿名的PL / SQL块,因此您需要将其转换为存储过程。在这种情况下,假设您不希望它成为包的一部分,您只需将DECLARE
更改为CREATE PROCEDURE my_procedure_name AS
:
CREATE PROCEDURE my_procedure_name AS
v_file UTL_FILE.file_type;
BEGIN
...
END;
/