2017-09-02 16 views
0

テーブルの複数のパーティションにわたって更新スクリプトを実行する必要があります。私は以下のようにそれのためのスクリプトを書いた:ORA-14108:パーティション拡張テーブル名構文が正しくありません

が、それは

を与える

ORA-14108:不正なパーティション拡張表名の構文

原因:パーティションのみを指定することができるアクセスしますその名前を使ってユーザーがパーティション番号またはバインド変数を使用しようとしました。

処置:修正文がその名前

私はこのエラーを回避することができますどのように任意のアイデアを使用してパーティションを参照するには?

DECLARE 

TYPE partition_names IS varray(1) OF varchar2(20); 

curr_partition partition_names; 

LENGTH integer; 

BEGIN 

curr_partition :=partition_names('SM_20090731'); 

LENGTH := curr_partition.count; 


FOR i IN 1 .. LENGTH LOOP 

dbms_output.put_line('Current Partition name is: '||curr_partition(i)); 

UPDATE TABLE_Y PARTITION (curr_partition(i)) 
SET PARTITION_KEY=TO_DATE('2017-08-21','YYYY-MM-DD') 
WHERE ORDER_ID IN 
    (SELECT ORDER_ID 
    FROM TABLE_X); 

END LOOP; 

END; 

/

答えて

3

あなたはSQL SELECTクエリまたはINSERT、PL/SQL、バインドからUPDATEまたはDELETEステートメントを実行するたびにあなたはすなわち、

EXECUTE IMMEDIATE 
    'UPDATE TABLE_Y PARTITION (' || curr_partition(i) || ') 
    SET PARTITION_KEY=TO_DATE(''2017-08-21'',''YYYY-MM-DD'') 
    WHERE ORDER_ID IN 
     (SELECT ORDER_ID 
     FROM TABLE_X)'; 

を、動的SQLを中にパーティション名を連結して使用する必要があります変数は、SQLエンジンにPL/SQL式の値を渡すために使用されます。特に、バインドパラメータはcurr_partition(i)に使用されます。しかし、そのようなクエリとステートメントのPARTITION節はバインドパラメータをサポートしていないようです。これは、Oracleがバインド・パラメータ値を持つ前に、問合せまたは文の実行計画を作成しようとしているためです。ただし、問合せまたは文でパーティションが指定されていると、その情報は計画の重要部分であり、バインドパラメータで指定します。

関連する問題