Не могу проверить нули в Oracle Pro * C - PullRequest
0 голосов
/ 16 мая 2019

Я новичок в Pro c Oracle и C. Когда я практикую пример базы на Oracle Pro c, я не могу протестировать значения Null, использующие индикатор, ссылка Oracle Pro * c ссылка на руководство (я не уверен, что мой код правильный).

Запись документа Oracle:

6.2.4 Проверка на NULL Вы можете использовать переменные индикатора в предложении WHERE для проверки на NULL, как показано в следующем примере:

EXEC SQL SELECT ename, sal INTO: emp_name,: salary FROM emp WHERE: комиссия INDICATOR: ind_comm IS NULL ...

Мой код выглядит следующим образом:

Locations table:

+-------------+---------+---------+
| Location_Id | Address | Country |
+-------------+---------+---------+
|           1 | London  |  London |
|           2 | US      |    null |
+-------------+---------+---------+


void connect()
{
    /* Connect to ORACLE. */
    strcpy(username, "hr");
    strcpy(password, "hr");

    EXEC SQL DECLARE DB_NAME DATABASE;
    EXEC SQL CONNECT : username IDENTIFIED BY : password;
    printf("\nConnected to ORACLE as user: %s\n", username);
}

void testNull()
{
    short country_ind = -1;
    char address[20];
    char *country = "country";
    EXEC SQL SELECT ADDRESS INTO :address FROM LOCATIONS
    WHERE :country INDICATOR :country_ind is null;
    /*
Current, it always output address is London instead of US
 */
        printf("address :%d\n", address);
    }

void main()
{
    connect();
    testNull();
}

1 Ответ

0 голосов
/ 16 мая 2019

Использование индикатора здесь не «указано» (непреднамеренный каламбур)

Я бы написал так

void testNull()
{
    short country_ind = -1;
    char address[20];
    char *country = "country";
    EXEC SQL SELECT ADDRESS INTO :address FROM LOCATIONS
    WHERE country  is null;
    /*
Current, it always output address is London instead of US
 */
        printf("address :%d\n", address);
    }

И вы можете использовать индикатор для адреса, если вам нужно проверить, не равен ли он потом

Если вы хотите, чтобы "страна" была переменной тогда ваш код должен выглядеть примерно так:

void testNull()
{
    short country_ind = 0;   // the word "country" is not null, but the value of the field can be depending on the query/data
     char address[20];
   char *country = "country";
EXEC SQL SELECT ADDRESS INTO :address FROM LOCATIONS
WHERE :country INDICATOR :country_ind is null;
/*
Current, it always output address is London instead of US
 */
        printf("address :%d\n", address);
    }
...