4

アプリケーションが SOCI を使用して Oracle からデータをフェッチすると、「エラー: Null 値がフェッチされ、インジケータが定義されていません」というメッセージが表示されます。

どうすれば回避できますか?

try
    {
        statement st = (sql.prepare <<
            "SELECT COLUMN1, COLUMN2, COLUMN3, COLUMN4, COLUMN5, COLUMN6 FROM MY_TABLE"
                into(column_value1),
                into(column_value2),
                into(column_value3),
                into(column_value4),
                into(column_value5),
                into(column_value6)
                );
        st.execute();
        while (st.fetch())
        {
            cout << column_value1.c_str() << " : " << endl;
        }
    }
4

1 に答える 1

4

ドキュメント ( http://soci.sourceforge.net/doc/3.2/ ) から、照会された列が null であるか、正しく読み取られているかを確認するためにインジケーターを提供する必要があります。

string phone;
indicator ind;
sql << "select phone from phonebook where name = :name",
    into(phone, ind), use(name);

if (ind == i_ok)
{
    cout << "The phone number is " << phone << '\n';
}
else
{
    cout << "There is no phone for " << name << '\n';
}

インジケータには次の値があります。

// the enum type for indicator variables
enum indicator { i_ok, i_null, i_truncated };
于 2015-12-17T07:09:38.067 に答える