1

Oracle クエリで字句解析を実行し、perl でクエリを (句に基づいて) さまざまな部分に分割する必要があります。たとえば、次のことを考慮してください。

Select deleteddate,deletedby from temptable where id = 10;

印刷する必要があります

select : deleteddate , deletedby
from : temptable
where : id = 10

私はこのコードスニペットを使用しました:

my $parser= SQL::Statement->new();
$parser->{PrinteError}=1;
my $query = SQL::Statement->new("select deleteddate,deletedby from temptable where id =10",$parser);

my @columns = $query->columns();

print $columns[0]->name();

これはdeleteddateを出力しますが、select句内でサブクエリを指定すると失敗します:

Select deleteddate,deletedby,(select 1+1 from dual) from temptable where id = 10;

正しい方向に向けてください。

ありがとう。

4

1 に答える 1

2

そのパッケージの制限のようです。それは汎用パーサーのようであり、サブクエリや「デュアルから」のようなOracle固有の構造などの高度な機能を理解できるものではありません。

システムの制約は何ですか? python がオプションの場合、これはより完全な機能を備えたライブラリのように見えます。

http://code.google.com/p/python-sqlparse/

もう 1 つのオプションは、実際の Oracle データベースを使用することです (それがオプションである場合)。するでしょう:

  • DBI および DBD::Oracle モジュールを使用して、Oracle への接続を作成し、データベース ハンドルを取得します。
  • クエリを使用してデータベース ハンドルで prepare() を呼び出すことにより、ステートメント ハンドルを作成します。
  • クエリを実行します (Oracle には、「テストのみ」または「解析のみ」モードで実行するオプションがある場合があります)。
  • ステートメント ハンドル (NAMES_hash プロパティなど) を調べて、列名を取得します。

それ以外の場合、残念ながら SQL::Statement モジュールはそのタスクに対応していないようです...

于 2012-10-30T07:05:09.027 に答える