DB2 - C вложенный SQL не вставит строку - PullRequest
0 голосов
/ 03 апреля 2020

Я пытаюсь создать C программу для генерации частично случайных строк и вставки большого количества их в строки db2 в al oop, поэтому мне нужно вставить ее из встроенной SQL .... Программа делает все, кроме вставок.

Я могу сделать запрос на выборку, c компилятор, прекомпилятор db2 и связыватель - все выполняются без ошибок. Он даже не позволяет мне делать вставку с жестко закодированными переменными, не говоря уже о переменных хоста, и запрос совершенно успешно выполняется из строки терминала

db2 "INSERT INTO
 SYT006_COUNTRY(SL_ISO2,BZ_COUNTRY,KZ_RISK)
 VALUES
 ('XY', 'wont work from embedded SQL', 'R')"

Переменные хоста, определенные как массивы символов с еще одной позицией для терминатора. Платформа - Ubuntu.

Я пробовал миллион вещей, поэтому вот код .. РЕДАКТИРОВАТЬ все устаревшее очищено

    #include <stdio.h>
    #include <string.h>
    #include <sqlca.h>
    #include <stdlib.h>
    #include <sqlenv.h>
    #include <sqlcodes.h>
    #include <sqlutil.h>
    #include <time.h>
    #include "utilemb.h"
    #include "sqlaprep.h"

    /* SQL includes */
      EXEC SQL INCLUDE SQLCA;
      EXEC SQL BEGIN DECLARE SECTION;

      EXEC SQL DECLARE     SYT006_COUNTRY TABLE
                (
                  KEYFIELD                            INT,
                  SL_ISO2                             CHAR(2) NOT NULL,
                  BZ_COUNTRY                          CHAR(30) NOT NULL,
                  KZ_RISK                             CHAR(1) NOT NULL
                ) ;


        char       hostVar[31];

      EXEC SQL END DECLARE SECTION;

    int main()
    {
      /* connect to the database REQUIRED */
    printf("Connecting to database...\n ");
    EXEC SQL CONNECT TO "sample";
    if (SQLCODE  <0)
    {
       printf("Connect Error. Code: %d\n",  sqlca.sqlcode);
    }
    else
    {
       printf("Connected to database. Code: %d\n",sqlca.sqlcode );
    }

    /* works only from command line terminal*/
      EXEC SQL
      INSERT INTO
      SYT006_COUNTRY(SL_ISO2,BZ_COUNTRY,KZ_RISK)
      VALUES
      ('XY', 'please', 'R');


    /* this one works perfectly normal*/
    /*
        EXEC SQL SELECT BZ_COUNTRY INTO :hostVar
        FROM SYT006_COUNTRY WHERE   KEYFIELD = 515;
        printf("printing hostVar: %s\n", hostVar);
    */
        printf("MAIN FINISH \n");
    return (0);
    }/*end main*/

Единственное, что выходит из строя, это когда я запускаю db2 из моего сценарий оболочки:

SQL5043N Не удалось запустить поддержку одного или нескольких протоколов связи, указанных в переменной среды DB2COMM. Однако основные функции менеджера баз данных запущены успешно. SQL1063N Обработка DB2START прошла успешно.

1 Ответ

0 голосов
/ 04 апреля 2020

Нет ничего лучше, чем чашка кофе на следующий день. Для встроенной программы SQL требуется строка

EXEC SQL COMMIT;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...