4

all_tab_partitions テーブルから現在のパーティションの名前を取得しようとしています。high_value (長いデータ型) と数値を比較しようとすると。エラーがスローされます:

ORA-00997: LONG データ型の不正な使用

SELECT PARTITION_NAME, HIGH_VALUE FROM ALL_TAB_PARTITIONS
WHERE TABLE_OWNER='SCHEMA_NAM'
AND TABLE_NAME='TABLE_NAME'
AND HIGH_VALUE>to_number(TO_CHAR(TRUNC(ADD_MONTHS(SYSDATE, 1), 'MONTH'), 'YYYYDDD'))
/
4

3 に答える 3

7

長い型は、大きな可変長の文字列を格納します。数値型ではありません。多くの制限があります。Oracleのドキュメントによると:

LONG値の使用には、次の制限があります。

  • テーブルに含めることができるLONG列は1つだけです。
  • LONG属性を持つオブジェクトタイプを作成することはできません。
  • LONG列は、WHEREまたは整合性制約に表示できません(ただし、NOT NULL制約に表示できる場合を除きます)。
  • LONG列にはインデックスを付けることができません。
  • LONGは正規表現では指定できません。
  • ストアド関数はLONG​​値を返します。
  • LONGデータ型を使用して、PL/SQLプログラム単位の変数または引数を宣言できます。ただし、SQLからプログラムユニットを呼び出すことはできません。
  • 単一のSQLステートメント内で、LONG列、更新されたテーブル、およびロックされたテーブルを同じデータベースに配置する必要があります。LONG列とLONGRAW列は、分散SQLステートメントでは使用できず、複製することもできません。
  • テーブルにLONG列とLOB列の両方がある場合、4000バイトを超えるデータを同じSQLステートメントのLONG列とLOB列の両方にバインドすることはできません。ただし、4000バイトを超えるデータをLONG列またはLOB列のいずれかにバインドできます。
于 2012-04-24T21:03:39.777 に答える
5

LONG 列の値を調べたり使用したりするには、次のような PL/SQL を作成する必要があります。

DECLARE
  strHigh_value  VARCHAR2(4000);
BEGIN
  FOR aRow IN (SELECT PARTITION_NAME, HIGH_VALUE
                 FROM ALL_TAB_PARTITIONS
                 WHERE TABLE_OWNER = 'SCHEMA_NAM' AND
                       TABLE_NAME = 'TABLE_NAME')
  LOOP
    strHigh_value := aRow.HIGH_VALUE;

    -- TODO: Manipulate strHigh_value in whatever manner you need

  END LOOP;
END;

共有してお楽しみください。

于 2012-04-25T11:45:06.913 に答える