2

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 を処理できません。各メソッドでホスト変数を繰り返し宣言する必要がないように、ホスト変数を宣言するにはどうすればよいですか?

それらをグローバル変数として持つことはできません。

4

0 に答える 0