Tips

SQL文で4Dメソッドを実行する場合、型が一致することは肝要

日付2009/08/03
ID75847 (英語原文参照)
バージョン11
プラットフォームMac & Win

SQLの4d_function_callを使用し、4DメソッドをSQL文に含める場合、メソッドの返り値とSQLのデータタイプを正確に一致させることは重要です。SQL文が予期しているデータタイプと、メソッドの$0宣言には特に注意して下さい。とりわけ外部4Dデータベースで実行されるSQL文の場合、タイプが一致することは重要です。

`Method name: Find_Nr_Of_Actors
C_LONGINT($0;$Count_L)
C_LONGINT($MovieID_L;$1)

$MovieID_L:=$1

SET QUERY DESTINATION(Into variable;$Count_L)
QUERY([MOVIE_ACTOR];[MOVIE_ACTOR]Movie_ID=$MovieID_L)
$0:=$Count_L

上記メソッドは、{fn Find_Nr_Of_Actors(ID) AS NUMERIC}のようなSQLにより内部データベースに対して発行された場合、4Dがタイプの不一致を処理するのでステートメントを完了することができます。

しかしながら、同じSQLを外部4Dデータベースに対して発行した場合、データタイプの不一致がエラーの原因となる恐れがあります。上記メソッドの場合、問題の原因は次の部分にあります。

  • メソッドの返り値は4バイトの値です。(C_LONGINT)
  • SQL文が期待しているのは8バイトの値です。(NUMERIC)
  • この問題を解決するには、$0をC_REALとして宣言するか、SQL文を訂正して {fn Find_Nr_Of_Actors(ID) AS INT32}とする必要があります。