適切な列を持つデータベースのすべてのテーブルに対してOracle検証関数を実行したいとします。 検証は、単に一つのテーブルに対して実行することができます:Oracleサブクエリでテーブルをループする
SELECT
count (*)
FROM
Table_name t
Where
SDO_GEOM.VALIDATE_GEOMETRY_WITH_CONTEXT(t.Column_name, 0.005) <> 'TRUE';
これは、個々のテーブルのために正常に動作しますが、テストするために100の上にありますように私は、サブクエリを使用して、Oracleメタデータ表にマージしたかったので、自動化全部。私は2つの亜種を考え出しましたが、どちらもうまくいきません。サブクエリ内部から変数を渡すのが難しいためです。 私の2の試みは、以下のとおりです。
SQLエラー:ORA-00904: "TAB" "COL":無効な識別子 00904. 00000 - "%sの:無効な識別子" を返し
SELECT TABLE_NAME tab, COLUMN_NAME col, (select count(*) from tab where sdo_geom.validate_geometry(tab.col, 0.005) <> 'TRUE')
From
All_Tab_Columns
where
owner = 'WCCDATA' and DATA_TYPE = 'SDO_GEOMETRY'
。
をと
SELECT count(*)
From
(SELECT
TABLE_NAME, COLUMN_NAME as col
FROM
All_Tab_Columns
where
owner = 'WCCDATA' and DATA_TYPE = 'SDO_GEOMETRY') subquery
WHERE sdo_geom.validate_geometry(subquery.col, 0.005) <> 'TRUE';
返す:
ORA-06512: "MDSYS.SDO_GEOM"、行2204 00942. 00000 - "表またはビューが存在しません"
誰でも意見はありますか?ありがとう。
おかげアラン、私もPL/SQLを見たことがありません私にとって全く新しい。 ORA-06512:at line 15 00933. 00000 - "SQLコマンドが正常に終了しませんでした。エラーコード:ORA-00933:SQLコマンドが正しく終了しませんでした。適切に終了していない "コード"任意のアイデア? –
@Jonathan:PL/SQLブロックはうまく動作するので、問合せにSQLを組み込む必要があります(15行目は 'EXECUTE IMMEDIATE'コマンドのように意味があります)。クエリを別々に実行し、生成された1つまたは2つのSQL文を実行してみてください。もう1つの可能性は、空白行がSQL Developerを投げ捨てているということです(私はそれが可能かどうかを知るためにそれに慣れていません)。 – Allan
申し訳ありませんが、喜びはありません。あなたの提案では、私は 'DECLARE'で' Select'を実行しました。それは自分自身であり、それが作成する 'choose'も同様です。 PL/SQLだけを実行する方法はわかりませんが、別のマシンからSQLPlusを使用して実行する方法を(最終的に)把握しましたが、SQL Developerとまったく同じエラーが発生します(00933ライン15の06512)。空行を削除しても、効果はありません。私たちのOracleは、違いがある場合は10.2.0.4です。 –