Pro C динамический SQL-запрос

Я должен выполнить следующий запрос, используя Pro C, чтобы получить вывод и ден отобразить вывод пользователю.

я попробовал следующий фрагмент кода:

int count=0;
char query1[100]="select count(code) from customer where customer_type='a';";
EXEC SQL ALLOCATE DESCRIPTOR 'out' ;
EXEC SQL PREPARE statement FROM :query1 ;
EXEC SQL DESCRIBE OUTPUT statement USING DESCRIPTOR 'out' ;
EXEC SQL SET DESCRIPTOR 'out' VALUE 1 TYPE = :data_type, 
    LENGTH = :data_len, DATA = :count ;
EXEC SQL DECLARE c CURSOR FOR statement ;
EXEC SQL OPEN c ;
EXEC SQL FETCH c INTO DESCRIPTOR 'out' ;
EXEC SQL GET DESCRIPTOR 'out' VALUE 1 :count = DATA;
EXEC SQL CLOSE c ;
printf("%-8d ",count);

но вывод, который я получаю, всегда равен 0.

Как мне поступить, чтобы получить правильный выход?? Может кто-нибудь помочь, пожалуйста...

2 ответа

Я настоятельно рекомендую не использовать этот метод динамического SQL Pro * C (метод динамического SQL Oracle 4), если вы не можете избежать этого.

Единственный случай, когда вам нужно использовать этот метод, это когда вы используете динамически генерируемый SQL, и вы не знаете, сколько переменных хоста будет использовано. Например, вы не знаете, сколько столбцов будет в SELECT пункт.

Полноценный пример использования метода динамического SQL Oracle 4 можно найти по адресу http://docs.oracle.com/cd/B28359_01/appdev.111/b28427/pc_15ody.htm.

Вполне возможно, у вас есть некоторые ошибки, которые не замечены.

Используйте EXEC SQL WHENEVER для продолжения проверки ошибок.

Одна вещь, которая бросается в глаза, это точка с запятой в конце значения query1. Если я правильно помню, Pro*c будет биться на это.

Другие вопросы по тегам