0

ポジショナルファイルにデータを書き込みたいのですが。以前にファイルに書き込まれなかったデータのみが書き込まれます。明らかに、データが以前に書き込まれたかどうかを判別するための列がテーブルにあります。

私の場合、フィールドの長さが80で、データの長さが30の場合、残りのスペースはスペースで埋められます。例えば、

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

最初のレコードは前のファイルに転送/書き込まれました。したがって、次のファイルには転送されません。名前の長さは80文字に固定されています。したがって、名前が80文字未満の場合、残りのスペースはスペースで埋められます。こんな感じになります。他の分野についても同様です

Name           SSN         
John           1234567890
Scarlett       123

どうすればいいですか?前もって感謝します。IamはOracle11gを使用しています。

編集

はい、コードを書くことができます。ただし、このコードを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

これは、あなたが始めたものとは本当に異なる質問であり、それがどのようにタイトル付けされているかです。何をする必要があるかを理解できたのは良いことですが、これは実際には別の質問であるはずです。しかし、それはかなり曖昧だったので、代わりにここで試してみるのもいいかもしれません...

プロシージャの記述に関するドキュメントはかなり明確であり、「oraclecreateprocedure」でGoogleで最初にヒットしたこの例などの例がたくさんあります。

現在、匿名のPL / SQLブロックがあるため、それをストアドプロシージャに変換する必要があります。この場合、パッケージの一部にしたくないと仮定すると、次のように変更する必要がありDECLAREますCREATE 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 に答える