SQL が埋め込まれた C++ コードを、Oracle データベースを備えた Linux サーバーに移植しています。
データ アクセス オブジェクトは、.select() .insert() .findByPrimaryKey() など、データベース インタラクション用のメソッドを提供する C++ クラスです。
これは、testdao.h ヘッダー ファイルです。
class TestDAO
{
private:
EXEC SQL BEGIN DECLARE SECTION;
int hv_col1;
int hv_col2;
.. .. upto 20 host variables ...
EXEC SQL END DECLARE SECTION;
public:
testObj* select();
bool insert(testObj);
testObj* findByPrimaryKey(primaryKeyObj);
}
これはtestdao.ecppファイルです
class TestDAO::select()
{
... select into hostvariables hv_col1, hv_col2 ..
... copy hostvariables data into object ...
}
class TestDAO::insert(testObj)
{
... copy data from the testObj into hostvariables ...
... EXEC SQL INSERT using hostvariales ...
}
class TestDAO::findByPrimaryKey(primaryKeyObj)
{
... copy primaryKeyObj data into hostvariables ...
... EXEC SQL SELECT where primary key ..
}
Oracle pro*C プリコンパイラは、ヘッダー ファイル内の EXEC SQL を処理できません。各メソッドでホスト変数を繰り返し宣言する必要がないように、ホスト変数を宣言するにはどうすればよいですか?
それらをグローバル変数として持つことはできません。