0

次の問題があります。DBI CPAN モジュール Perl で実行する SQL ファイルがあります。この Web サイトで、問題を解決するための 2 つの解決策を見ました。

  1. SQL ファイルを 1 行ずつ読み取る

  2. 1 つの命令で SQL ファイルを読み取る

では、どちらが優れており、各ソリューションの実際の違いは何ですか?

編集

図書館用です。出力戻りコードを取得する必要があります。

渡されるファイルの種類は次のとおりです。

    set serveroutput on;
    set pagesize 20000;
    spool "&1."
    DECLARE
        -- Récupération des arguments
        -- &2: FLX_REF, &3: SVR_ID, &4: ACQ_STT, &5: ACQ_LOG, &6: FLX_COD_DOC, &7: ACQ_NEL, &8: ACQ_TYP    
        VAR_FLX_REF VARCHAR2(100):=&2;
        VAR_SVR_ID NUMBER(10):=&3;
        VAR_ACQ_STT NUMBER(4):=&4;
        VAR_ACQ_LOG VARCHAR2(255):=&5;
        VAR_FLX_COD_DOC VARCHAR2(30):=&6;
        VAR_ACQ_NEL NUMBER(10):=&7;
        VAR_ACQ_TYP NUMBER:=&8;
    BEGIN
        INSERT INTO ACQUISITION_CFT 
            (ACQ_ID, FLX_REF, SVR_ID, ACQ_DATE, ACQ_STT, ACQ_LOG, FLX_COD_DOC, ACQ_NEL, ACQ_TYP) 
        VALUES 
            (TRACKING.SEQ_ACQUISITION_CFT.NEXTVAL, ''VAR_FLX_REF'', 
                ''VAR_SVR_ID'', sysdate, VAR_ACQ_STT, ''VAR_ACQ_LOG'',
                ''VAR_FLX_COD_DOC'', VAR_ACQ_NEL, VAR_ACQ_TYP);
    END;

    /
    exit;

もう 1 つ質問があります。DBI Oracle モジュールについてです。SQL ファイルと制御ファイルに同じコードを使用できますか?

(SQL制御ファイルの例)

    LOAD DATA
    APPEND INTO TABLE DOSSIER
    FIELDS TERMINATED BY ';'
    (
    DSR_IDT,
    DSR_CNL,
    DSR_PRQ,
    DSR_CEN,
    DSR_FEN,
    DSR_AN1,
    DSR_AN2,
    DSR_AN3,
    DSR_AN4,
    DSR_AN5,
    DSR_AN6,
    DSR_PI1,
    DSR_PI2,
    DSR_PI3,
    DSR_PI4,
    DSR_NP1,
    DSR_NP2,
    DSR_NP3,
    DSR_NP4,
    DSR_NFL,
    DSR_NPG,
    DSR_LTP,
    DSR_FLF,
    DSR_CLR,
    DSR_MIM,
    DSR_TIM,
    DSR_NDC,
    DSR_EMS NULLIF DSR_EMS=BLANKS "sysdate",
    JOB_IDT,
    DSR_STT,
    DSR_DAQ "CASE WHEN :DSR_DAQ IS NOT NULL THEN SYSDATE ELSE NULL END"

    )
4

3 に答える 3

1

実際、あなたが参照している2つの回答は、行ごとに読んで実行するという同じ解決策を提案しています(ただし、最初のほうがポイントが明確です)。2 番目の質問にはオプションの回答があり、ファイルには単一のステートメントが含まれています。

SQL を 1 行ずつ実行しないと、エラーをトラップするのが非常に難しくなります。

于 2013-04-02T08:42:34.067 に答える