1

私は簡単なテストを行いVerticaます:

ha=> insert into test(Name, City) values( 'Nan', 'Nanjing');
 OUTPUT 
--------
      1
(1 row)

ha=> select node_name, wos_row_count, ros_row_count from projection_storage where anchor_table_name = 'test';
   node_name   | wos_row_count | ros_row_count 
---------------+---------------+---------------
 v_ha_node0001 |             1 |             3
(1 row)

ha=> select * from test;
   ID   | Name |  City   
--------+------+---------
 250001 | Nan  | Nanjing
 250002 | Nan  | Nanjing
 250003 | Nan  | Nanjing
 250004 | Nan  | Nanjing
(4 rows)

select操作は OK と表示されます (データはWOSすべて表示ROSされます)。

次に、以下を使用する簡単なプログラムを作成しますODBC

ret = SQLExecDirect(stmt_handle, (SQLCHAR*)"select * from test", SQL_NTS);
if (!SQL_SUCCEEDED(ret))
{
    printf("Execute statement failed\n");
    goto ERR;
}

while ((ret = SQLFetch(stmt_handle)) == SQL_SUCCESS)
{
    row_num++;
}

printf("Row number is %d\n", row_num);

しかし、結果は次のとおりです。

Row number is 3

のデータはカウントされませんWOS

また、DbVisualizer3 行のデータも表示されます。
VXTML

を使用するための特別なオプションが必要ODBCですか? よろしくお願いします!

4

1 に答える 1

2

デフォルトでは、vsql はトランザクション モードです。vsqlでセッションを開いたままにしておく限り、トランザクション内にいるため、期待どおりの結果が得られます。

セッション (odbc、dbvis) の外に出るとすぐに、トランザクションは (まだ) 表示されません。他のセッションから見えるようにするには、'COMMIT;' を発行する必要があります。vsql 内。その後 (確認済み)、odbc および dbvis からデータにアクセスできます。

トランザクションを自動コミットするように設定できます(vsqlのみ)

\set AUTOCOMMIT on
-- disable with
\set AUTOCOMMIT off

自動コミットが有効になっているかどうかを知るには、showを使用できます。

show AUTOCOMMIT;
    name    | setting
------------+---------
 autocommit | off
(1 row)

を使用してvsql呼び出しで実行することもできます--set autocommit=on。それが良いアイデアかどうかは別の問題です。

ODBC では、さまざまな方法で自動コミットを設定できます。odbc docを参照してください。

于 2014-11-27T09:56:12.127 に答える