0

次の PL/SQL は実行されず、単に「無効な引数」をエラーとして返します。私はすべての行を1行ずつコメントアウトするところまで行っており、受け取ったエラーを変えることができますが、エラーがどこにあるかを特定できず、権限または実行中のユーザーにある可能性があるため、procを実行できませんが、どんな助けもありがたく受け取られます。これがプロセスです

DECLARE
    ind NUMBER;             -- Loop index 
    h1 NUMBER;              -- Data Pump job handle 
    percent_done NUMBER;    -- Percentage of job complete 
    job_state VARCHAR2(30); -- To keep track of job state 
    le ku$_LogEntry;        -- For WIP and error messages 
    js ku$_JobStatus;       -- The job status from get_status 
    jd ku$_JobDesc;         -- The job description from get_status 
    sts ku$_Status;         -- The status object returned by get_status 
BEGIN
    h1 := DBMS_DATAPUMP.OPEN('EXPORT','SCHEMA',NULL,'SQL_INSTALLER_01152009_1014','LATEST');
    DBMS_DATAPUMP.ADD_FILE(h1,'SQL_INSTALLER_01152009_1014.dmp','ORACLE_SCRIPT_RUNNER_BACKUP',NULL,1);
    DBMS_DATAPUMP.ADD_FILE(h1,'SQL_INSTALLER_01152009_1014.log','ORACLE_SCRIPT_RUNNER_BACKUP',NULL,3);
    DBMS_DATAPUMP.METADATA_FILTER(h1, 'SCHEMA_LIST','''speccs_web_test''', NULL, NULL);
    DBMS_DATAPUMP.START_JOB(h1);

    percent_done := 0;
    job_state := 'UNDEFINED';
    while (job_state != 'COMPLETED') and (job_state != 'STOPPED') loop 
        dbms_datapump.get_status(
            h1,
            dbms_datapump.ku$_status_job_error +
            dbms_datapump.ku$_status_job_status +
            dbms_datapump.ku$_status_wip,
            -1,
            job_state,
            sts);

        js := sts.job_status;
        if js.percent_done != percent_done then 
            percent_done := js.percent_done;
        end if;

        if (bitand(sts.mask,dbms_datapump.ku$_status_wip) != 0) then 
            le := sts.wip;
        else 
            if (bitand(sts.mask,dbms_datapump.ku$_status_job_error) != 0) then 
                le := sts.error;
            else 
                le := null;
            end if;
        end if;

        if le is not null then 
            ind := le.FIRST;
            while ind is not null loop 
                ind := le.NEXT(ind);
            end loop;
        end if;
    end loop;
    dbms_datapump.detach(h1); 
END;
4

4 に答える 4

1

私は何かを見つけました:

ここを参照してください: http://petermag.blogspot.com/2008/01/export-datapump-how-to-do-via-plsql.html

ダンプ ファイルが既に存在する場合、無効な引数エラー エラーが発生します。

于 2009-01-15T11:02:41.433 に答える
0

ありがとうございます。私はデバッグを続け、それを1行に釘付けにしました..

DBMS_DATAPUMP.METADATA_FILTER(h1, 'SCHEMA_LIST','''speccs_web_test''', NULL, NULL);

これがその一つです。それをコメントアウトすると、すべてが膨らみます。エラーは、これらの値の 1 つが無効であることを示しており、'''speccs_web_test''' が奇妙に見えると推測する危険がありますが、検索はこれが正しいことを示しているようです。 (''名前'', ''名前''); これは ('name', 'name') IN リストの有効な形式に変換されます。

おそらく1、2分でソートしますが、あなたは私が数時間前にそれを釘付けにしたと思います:)

于 2009-01-15T15:20:12.410 に答える
0

この特定の問題は、schema_name speccs_web_test が大文字ではないことが原因です。SPECCS_WEB_TEST は問題なく、proc は現在実行中です ;)

于 2009-01-15T15:32:45.957 に答える
0

SQL Developer をダウンロードして、そのデバッガーを使用できます (無料です)。

ここを参照してください: http://www.oracle.com/technology/software/products/sql/index.html

于 2009-01-15T10:38:24.523 に答える