0

以下 PL/SQL 将不会执行,只会返回“无效参数”作为错误。我已经把每一行都注释掉了,我可以改变我收到的错误,但我无法让 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

您可以下载 SQL Developer 并使用它的调试器(它是免费的)。

见这里:http ://www.oracle.com/technology/software/products/sql/index.html

于 2009-01-15T10:38:24.523 回答
0

谢谢那里的家伙。我继续调试并将其确定为一行..

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

这是一个。把它评论出来,一切都很好。该错误表明其中一个值无效,我会冒险猜测它看起来很奇怪'''speccs_web_test''',但搜索似乎表明这是正确的,这是因为该参数是一个列表并且可以是' (''名字'', ''名字''); 这将转换为 ('name', 'name') IN 列表的有效格式。

我可能会在一两分钟内把它整理好,但你认为我会在几个小时前搞定它:)

于 2009-01-15T15:20:12.410 回答
0

对于这个特殊问题,这是因为 schema_name speccs_web_test 不是大写的。SPECCS_WEB_TEST 很好,proc 现在正在运行;)

于 2009-01-15T15:32:45.957 回答