質問

最近、サードパーティ製品が使用するOpenEdgeデータベースを使用して作業を行う必要がありましたが、今日(多くの髪を引っ張った後)、ビューが結果を返さない理由を最終的に特定しました。 問題のこのビューは、約100個の個別のテーブルを組み合わせて照会されます(このデータベースに対する権限は限られています)。このビューによって返されるフィールドの1つは、ハードコーディングされた文字列リテラルです。

'John Smith' AS TheName

この文字列を含むクエリを実行するのが困難でした。これをRTrim(ビューは多くの末尾スペースを返しました)し、別のフィールドと連結しようとしました。 ただし、このフィールドでRTrimを使用した場合、エラーメッセージ、またはnullなどを返す代わりに、行は返されませんでした。 WHERE句またはJOINで使用しようとしていませんでした。これは、単にSELECT ... FROM VIEWNAMEの一部でした。ビューを確認した後、ビューが文字列の長さを9文字として誤って検出したようで(定義で長さが指定されていません)、RTrimは機能しませんでした。 これで、エラーメッセージやSELECTのNULL値につながる理由を理解できましたが、行がまったく返されないのはなぜですか。これは、SQLの適切な動作とは思えないため、他のRDBMSで発生することはありません。

その他の情報:ODBCとWinSQLを介したクエリのテストを行っています。これは、既存のASP.NETアプリに含まれることを目的としています。ビューを作成する権限はありますが、これを介してバックエンドにアクセスすることはできません。

更新:奇妙なフォローアップとして、WHERE句なしでこのビューを照会しようとすると、レコードが返されないことがわかりました。これには同じ原因が考えられます。

役に立ちましたか?

解決

これは、進行状況データベース内のSQL-WIDTHに関連しているように聞こえます。 Progressの問題の1つは、フィールドの内容がSQL-WIDTHを超えると、奇妙なSQL動作が発生することです(ドライバーが失敗する場合もあれば、結果が得られない場合もあります)。

これを識別するには、 dbtool コマンドを使用して、超過する可能性のあるSQL-WIDTHを確認する必要があります。

他のヒント

空白がないことを確認してください。トリミングでは、空白だけが削除されるわけではありません。空白もヌルではありません。文字セットには違いがありますが、エディターでは目に見えて違いはありません。 いくつかのデータベース、DBII、Oracle、PostGreSQLでこれに遭遇しました。エディターの文字セットを確認し、表を表示してみてください。何も表示されないか、大きな長方形が表示される場合があります。

これは非常に奇妙な動作のように聞こえます。それをコードで囲み、アプリケーションでトリムや文字列の操作を行ってください。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top