1

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

'John Smith' AS TheName

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

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

更新:気紛れなフォローアップとして、WHERE句を指定せずにこのビューをクエリしようとすると、レコードが返されないことがわかりました。これも同じ原因である可能性があります。

4

3 に答える 3

1

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

于 2009-09-09T18:22:34.690 に答える
1

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

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

于 2009-12-02T11:37:35.517 に答える
0

それは非常に奇妙な行動のように聞こえます。その周りをコーディングし、アプリケーションでトリムや文字列の操作を行って、作業を進めてください。

于 2009-09-09T17:12:51.930 に答える