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 будет биться на это.