Your SlideShare is downloading. ×
C++ with DB
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×

Introducing the official SlideShare app

Stunning, full-screen experience for iPhone and Android

Text the download link to your phone

Standard text messaging rates apply

C++ with DB

681
views

Published on

Published in: Education, Technology, Business

1 Comment
0 Likes
Statistics
Notes
  • Be the first to like this

No Downloads
Views
Total Views
681
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
1
Comments
1
Likes
0
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. Программируемый клиент ORACLE Технология Pro C/C++
  • 2. Два вида программного интерфейса
    • Предкомпилятор
    • CALL - интерфейс
  • 3. Достоинства и недостатки подходов
    • СПРАВОЧНИК ВЫЗОВОВ
    • Call – интерфейс требует детального знания процедур и функций :
    • названия ;
    • количество пар-ров;
    • тип параметров;
    • знание кодов возврата;
    • обработка исключительных ситуаций;
    • и т.п.
    • Время и трудозатраты на разработку - возрастает
    • ПРЕДКОМПИЛЯТОР
    • Использовать проще :
    • наглядность;
    • понятность;
    • структурированность
    • Однако, мобильность программ – меньше, так как требуется предкомпилятор Oracle , позволяющий строить код исходной программы на С / С++, Fortran, Ada, Cobol, Pascal и др.
  • 4. Возможности предкомпиляции
    • Один вызов к Oracle автоматически преобразуется в несколько вызовов процедур(функций).
    • Одна программа может применяться для работы с разными БД
    • Несколько программ могут быть отдельно предкомпилированы и совместно выполнены (собраны).
  • 5. Этапы разработки приложений отладка
  • 6. Правила и соглашения технологии Pro C/C++
    • В программу на Pro C/C++ может быть включен любой оператор SQL
    • Перед всеми операторами SQL ставится префикс EXEC SQL
    • ( для некоторых уникальных конструкций EXEC ORACLE).
    • Операторы SQL делятся на декларативные и выполняемые.
    • После исполнения выполняемых операторов коды возврата заносятся в SQLCA
    • Декларативные операторы не изменяют SQLCA
  • 7. Структура программы на Pro C/C++
  • 8. Секция DECLARE
    • Единственная
    • Может иметь локальную или глобальную видимость
    • EXEC SQL BEGIN DECLARE SECTION;
    • Описание переменных обмена данными
    • EXEC SQL END DECLARE SECTION;
  • 9. Пример EXEC SQL BEGIN DECLARE SECTION; Int n,no; Char name[11]; EXEC SQL END DECLARE SECTION; Void main(){ ………… EXEC SQL select id, fio into :n,:name from personal where num_o = :no; Для отличия переменных от атрибутов в SQL запросах используется символ ‘:’ , перед именем переменной.
  • 10. Для строк переменной длины в секции DECLARE используется специальный тип VARCHAR. Пример VARCHAR j[40]; Автоматически порождается Struct { unsigned short int len; unsigned char arr[40]; } j; Можно использовать в программе j.len – фактическая длина стринга j.arr – указатель на массив содержимого
  • 11. INCLUDE SQLCA
    • EXEC SQL INCLUDE SQLCA;
    • Область SQL С A содержит :
    • флаги предупреждений ;
    • информацию о событиях;
    • коды ошибок;
    • текст диагностики ошибок;
    • и др. служебную информацию.
  • 12. Пример … .. If( sqlca.sqlcode == 0 ) continue; // успешное завершение sql else if( sqlca.sqlcode < 0 ) cout << “ Ошибка выполнения ”; else cout << “ Выбрана последняя строка ”;
  • 13. CONNECT
    • Соединение с ORACLE Server
    • EXEC SQL CONNECT :oralogpass;
  • 14. Пример EXEC SQL BEGIN DECLARE SECTION; Varchar oralogpass[40]; EXEC SQL END DECLARE SECTION; ……… Strcpy(oralogpass.arr,”o01/o01@stud”); oralogpass.len=strlen(oralogpass.arr); EXEC SQL CONNECT :oralogpass; ………… .
  • 15. Тело программы
    • C тандартные операторы языка C/C++ ;
    • Операторы SQL (select,delete,insert,update) ;
    • Контроль распределенной обработки данных
    • EXEC SQL DECLARE < имя > STATEMENT;
    • Связь и управление распределенной БД
    • EXEC SQL DECLARE < имя > DATABASE;
    • Изменение стандартных установок
    • EXEC ORACLE OPTION ( option= значение );
  • 16. Множественный и единичный выбор с использованием массивов м указателей. Оператор массив(указатель) простая переменная Select заголовок можно можно Select .. Where нельзя можно Insert.. Values() можно можно Update .. Set.. where можно однов. можно однов.
  • 17. Примеры EXEC SQL BEGIN DECLARE SECTION; char name[100][100]; int n[100]; Float sal[100]; EXEC SQL END DECLARE SECTION; …… .. EXEC SQL SELECT fio,id into :name,:n FROM personal; // ok! EXEC SQL SELECT fio,id into :name,:n FROM personal WHERE many = :sal; // неверный оператор EXEC SQL INSERT INTO personal(fio,id,many) VALUES(:name, :n, :sal); // ok! EXEC SQL UPDATE SET many = :sal WHERE id = :n; //ok! EXEC SQL UPDATE SET many = :sal WHERE id = :n[0]; // no!
  • 18. Оператор COMMIT WORK завершает транзакцию EXEC SQL COMMIT WORK; Оператор COMMIT WORK RELEASE осуществляет DISCONNECT EXEC SQL COMMIT WORK RELEASE;
  • 19. Пример программы, которая позволяет задать ( с клавиатуры ) номера сотрудников и их оклады, а затем добавляет эти данные в таблицу #include <stdio.h> #include <string.h> EXEC SQL BEGIN DECLARE SECTION; varchar log_pass[40]; int loop,n[100]; float many[100]; EXEC SQL END DECLARE SECTION; EXEC SQL INCLUDE sqlca.h; main() { int i,ret; strcpy(log_pass.arr,”o01/o01@stud”); log_pass.len = strlen(log_pass.arr); EXEC SQL CONNECT :log_pass; for(i=0;i<100;i++) { ret=scanf(“%d %f ”, &n[i],&many[i]); if(ret == EOF|| ret ==0|| n[i]==0) break; } loop=i; EXEC SQL FOR :loop INSERT INTO sotrud (Tnum,okl) VALUES(:n,:many); EXEC SQL COMMIT WORK RELEASE; }