Объяснение о фрагменте кода - PullRequest
1 голос
/ 09 октября 2009

Я вижу следующий фрагмент кода в унаследованном приложении, которое обращается к Informix через C. Может кто-нибудь объяснить, чего пытается достичь SQL в коде? Спасибо.

EXEC SQL BEGIN DECLARE SECTION;
int i_tableref;
EXEC SQL END DECLARE SECTION;

    /* Some code here */

if (!i_sel_ref)
{
    exec sql begin declare section;
    const char *sql1 = 
        "select refer_num.nextval from table ( SET{''} )";
    exec sql end declare section;
    exec sql prepare oref_sel_fid from :sql1;
    if ( sqlca.sqlcode != SQL_OK )
    {
         /* some code */
    }
    /* More code */
}

Ответы [ 2 ]

1 голос
/ 09 октября 2009

Я полагаю, что это получение следующего значения из последовательности базы данных с именем refer_num. Последовательности - это способ генерирования значений для числовых уникальных идентификаторов - немного похоже на столбцы IDENTITY в некоторых СУБД. Я не знаю Informix, но я предполагаю, что «таблица (SET {''})» - это способ создания псевдотаблицы с 1 строкой, чтобы вы могли выполнить оператор выбора, к которому фактически не требуется доступ любая реальная таблица базы данных. В Oracle есть специальная таблица DUAL для этой цели, и в Oracle это будет обычным явлением:

select refer_num.nextval from dual;
0 голосов
/ 27 июня 2017

для получения следующего значения генератора последовательности в Informix:

выберите your_seq_generator_name.nextval из table(set{1});

...