Gistrec

DB lab 4

Oct 17th, 2019
374
0
Never
1
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.37 KB | None | 0 0
  1. /**
  2.  * Запускать с помощью: pgcci Source && ./Source.exe
  3.  */
  4.  
  5. #include <sqlca.h>
  6. #include <stdio.h>
  7. #include <stdlib.h>
  8. #include <time.h>
  9. #include <sys/time.h>
  10. #include <unistd.h>
  11. #include <sqltypes.h>
  12.  
  13. void error_func(char *message) {
  14.     printf("Error code: %d\n", sqlca.sqlcode);
  15.     printf("Message: %s\n", message);
  16.     printf("Description: %s\n", sqlca.sqlerrm.sqlerrmc);
  17. }
  18.  
  19. int main() {
  20.     EXEC SQL begin declare section;
  21.     int buf;
  22.     EXEC SQL end declare section;
  23.  
  24.     /*********************\
  25.     |* Подключаемся к БД *|
  26.     \*********************/
  27.     EXEC SQL connect to students@fpm2.ami.nstu.ru user "pmi-b6103" using "juIppOw";
  28.     if(sqlca.sqlcode !=0 ) {
  29.         printf("Authentication failed\n");
  30.         return 1;
  31.     }
  32.  
  33.     /*******************************************************\
  34.     |* Устанавливаем схему, в которой будем искать таблицу *|
  35.     \*******************************************************/
  36.     EXEC SQL set search_path to pmb6103;
  37.     if(sqlca.sqlcode != 0) {
  38.         printf("Error\n");
  39.         return 2;
  40.     }
  41.  
  42.     EXEC SQL begin; // Создание транзакции
  43.  
  44.     /**********************\
  45.     |* Выполнение запроса *|
  46.     \**********************/
  47.     EXEC SQL SELECT COUNT(DISTINCT spj.n_post) into :buf
  48.              FROM pmib6103.spj
  49.              JOIN pmib6103.j ON j.n_izd = spj.n_izd
  50.              WHERE j.town IN (SELECT p.town
  51.                               FROM pmib6103.p
  52.                               WHERE p.cvet = 'Красный');
  53.    
  54.     switch (sqlca.sqlcode) {
  55.         // Когда запрос завершился успешно и получены данные
  56.         case 0:
  57.             printf("Result: %d\n", buf);
  58.             EXEC SQL COMMIT; // Применение транзакции
  59.             break;
  60.         // Когда запрос завершился успешно, но данных нет
  61.         case 100:
  62.             printf("No data\n");
  63.             EXEC SQL COMMIT; // Применение транзакции
  64.             break;
  65.         // Произошла какая-то ошибка
  66.         default:
  67.             error_func("Error while processing query");
  68.             EXEC SQL ROLLBACK; // Отмена транзакции
  69.             break;    
  70.     }
  71.     return 0;
  72. }
Advertisement
Comments
  • User was banned
Add Comment
Please, Sign In to add comment