-1

<------- PeopleCode ------>

やあ、

SQLEXECとSQL.fetch()の両方を使用して実行しようとしたSQLクエリがありますが、問題は、値をパラメーター(:1、:2 ...)に渡すときに、行を返さないが、クエリ自体のwhere句に値をハードコーディングすると、正しい値が取得されます。誰か助けてもらえますか?

私のクエリは次のサンプルクエリのようになります。select*fromPS_rec1 where emplid =:1 and plan_type =:2

値をハードコーディングするまでデータは返されません。

バックエンドで値を確認しましたが、フェッチするデータがいくつかあります。さらに、同じクエリをTOADで実行すると、データが取得されます。

4

3 に答える 3

0

SQLステートメントでバインドを使用する直前に、バインドをログファイルに出力しようとしましたか?

バインドが機能していないがリテラルが機能している場合は、バインドに期待する値が含まれていない可能性があります。

SQLステートメントの直前に期待する値にバインドを明示的に設定することもできます。これにより、バインドを渡す方法が正しく機能していることが証明されます。

于 2011-03-04T00:39:11.417 に答える
0

SQL execでフェッチされた値を取得するには、同じレコードを再度更新する必要がありました。何が問題だったのかわかりませんが、明示的なコミットの後でも、以前の更新でデータベースに変更が書き込まれなかった可能性があります。

于 2011-03-05T20:06:41.280 に答える
0

さて、あなたはあなたの正確なSQLExecステートメントを質問に入れる必要があります。

しかし、SQLExecに本当に「Select * ...」がありますか?テーブルにはいくつの列がありますか?where句について言及しているので、それはあなたのステートメントです

SQLExec("select * from PS_rec where emplid=:1 and plan_type=:2", &var1, &var2, &vartocontainthewholerow);

これはSQLツール(ヒキガエル)では機能しますが、AEやその他のタイプのPeoplecodeプログラムではおそらく機能しません。

ここで、テーブルに3つの列がある場合、次のようなものがないはずです。

SQLExec("select emplid, plan_type, column3 from PS_rec where emplid = :1 and plan_type=:2", &emplidIn, &plan_typeIn, &emplidOut, &plan_typeOut, &column3Out);

emplidとplan_typeが2つであるテーブルの3つの列では、アスタリスク'*'ではなく、必要なすべての列をリストする必要があることに注意してください。emplidとplan_typeを選択するのはちょっとばかげています。

于 2011-03-06T04:42:51.813 に答える