2

特定の時点でオブジェクトを Sybase データベースにインストールするビルドファイルを作成しました。

コードは開発者によって提供され、変更することはできません。isqlコマンドを使用して指定された SQL を手動で実行すると、機能します。

これは、特定のオブジェクトをインストールするビルドファイルの一部です。

<sql
    driver="${db.driver}" url="${db.url}" userid="${db.user}"
    password="${db.password}" src="${file}"
    print="true" delimiter="go" delimitertype="row"
    classpathref="sybase.lib.path" output="${file}.out"
    errorproperty="install.failed" onerror="continue" keepformat="true" />

ほとんどの場合、解決策は機能しますが、二重引用符 (") を含むスクリプトを実行しようとすると、毎回失敗します。

たとえば、SQL スクリプトに次のようなものが含まれているとします。

declare @var varchar(30)
set @var = "SOME STRINGS"

次のエラーで失敗します。

[sql] com.sybase.jdbc3.jdbc.SybSQLException: Invalid column name 'SOME STRINGS'.

誰かがこの問題を解決しましたか?

Ant sqltaskのドキュメントを読みました。Ant バージョン 1.8.2 を使用しています。

次の jdbc ドライバーでテストしました。

  • com.sybase.jdbc3.jdbc.SybDriver
  • net.sourceforge.jtds.jdbc.Driver
4

1 に答える 1

0

セッションが確立されると、設定 QUOTED_IDENTIFIER がデフォルトで true に設定されます。サーバー設定でこれを調整できると思いますが、いずれにしても、これをURLに追加することでセッションの場合に設定できます。

?SQLINITSTRING=set quoted_identifier off

したがって、URL は次のようになります。

"jdbc:sybase:Tds:<server>:<port>/<db>?SQLINITSTRING=set quoted_identifier off"

複数の設定がある場合は、アンパサンドで結合します&参照してください。

quoted_identifier

Adaptive Server が二重引用符で区切られた識別子を認識するかどうかを決定します。デフォルトでは、quoted_identifier はオフであり、すべての識別子は次のいずれかでなければなりません。

  • 有効な識別子の規則に準拠します。

  • かっこで囲んでください。

set quoted_identifier on を使用すると、二重引用符は大括弧と同じように動作し、アルファベット以外の文字で始まるテーブル、ビュー、および列の名前を使用できます。二重引用符内の識別子。区切り識別子は 28 バイトを超えることはできず、すべてのフロントエンド製品で認識されない可能性があり、システム プロシージャのパラメーターとして使用すると予期しない結果が生じる可能性があります。

quoted_identifier がオンの場合、二重引用符で囲まれたすべての文字列が識別子として扱われます。文字列またはバイナリ文字列を一重引用符で囲みます。

于 2012-08-30T19:36:42.040 に答える