Программируемый клиент  ORACLE Технология  Pro C/C++
Два вида программного интерфейса Предкомпилятор CALL - интерфейс
Достоинства и недостатки подходов СПРАВОЧНИК ВЫЗОВОВ Call – интерфейс требует детального знания процедур и функций : названия ; количество пар-ров; тип параметров; знание кодов возврата;  обработка исключительных ситуаций; и т.п. Время и трудозатраты на разработку - возрастает ПРЕДКОМПИЛЯТОР Использовать проще : наглядность; понятность; структурированность Однако, мобильность программ – меньше, так как требуется предкомпилятор  Oracle , позволяющий строить код исходной программы  на С / С++,  Fortran, Ada, Cobol, Pascal  и др.
Возможности предкомпиляции Один вызов к  Oracle  автоматически преобразуется в несколько вызовов процедур(функций). Одна программа может применяться для работы с разными БД Несколько программ могут быть отдельно предкомпилированы и совместно выполнены (собраны).
Этапы разработки приложений отладка
Правила и соглашения технологии  Pro C/C++ В программу на  Pro C/C++  может быть включен любой оператор  SQL Перед всеми операторами  SQL  ставится префикс  EXEC SQL (  для некоторых уникальных конструкций  EXEC ORACLE). Операторы  SQL  делятся на  декларативные  и  выполняемые. После исполнения выполняемых операторов коды возврата заносятся в  SQLCA Декларативные операторы не изменяют  SQLCA
Структура программы на  Pro C/C++
Секция  DECLARE Единственная Может иметь локальную или глобальную видимость EXEC SQL BEGIN DECLARE SECTION; Описание переменных обмена данными EXEC SQL END DECLARE SECTION;
Пример 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  запросах используется символ  ‘:’ , перед именем переменной.
Для строк переменной длины в секции  DECLARE  используется специальный тип  VARCHAR. Пример VARCHAR j[40]; Автоматически порождается Struct { unsigned short int len; unsigned char arr[40]; } j; Можно использовать в программе j.len –  фактическая длина стринга j.arr –  указатель на массив содержимого
INCLUDE SQLCA EXEC SQL INCLUDE SQLCA; Область  SQL С A  содержит : флаги предупреждений ; информацию о событиях; коды ошибок; текст диагностики ошибок; и др. служебную информацию.
Пример … .. If( sqlca.sqlcode == 0 ) continue; // успешное завершение  sql  else if( sqlca.sqlcode < 0 ) cout << “ Ошибка выполнения ”; else cout << “  Выбрана последняя строка ”;
CONNECT Соединение с  ORACLE Server EXEC SQL CONNECT :oralogpass;
Пример 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; ………… .
Тело программы C тандартные операторы языка  C/C++  ; Операторы  SQL (select,delete,insert,update) ; Контроль распределенной обработки данных EXEC SQL DECLARE < имя > STATEMENT; Связь и управление распределенной БД EXEC SQL DECLARE < имя > DATABASE; Изменение стандартных установок  EXEC ORACLE OPTION ( option= значение  );
Множественный и единичный выбор с использованием массивов м указателей. Оператор  массив(указатель)  простая переменная Select  заголовок  можно  можно Select .. Where  нельзя    можно Insert.. Values()   можно можно Update .. Set.. where   можно однов. можно однов.
Примеры 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!
Оператор  COMMIT WORK  завершает транзакцию EXEC SQL COMMIT WORK; Оператор  COMMIT WORK RELEASE  осуществляет  DISCONNECT EXEC SQL COMMIT WORK RELEASE;
Пример программы, которая позволяет задать ( с клавиатуры ) номера сотрудников и их оклады, а затем добавляет эти данные в таблицу #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”, &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; }

More Related Content

PDF
PDF
Gate 4000
PDF
PDF
PPT
Minsk Seminar September09 Bntu
PDF
PDF
PPSX
Решение по управлению web-контентом от компании Oracle.
Gate 4000
Minsk Seminar September09 Bntu
Решение по управлению web-контентом от компании Oracle.

What's hot (19)

DOC
проектная деятельность.
PDF
WUD2008 - Михаил Матвеев, Данила Корнев - Использование контекстной информаци...
 
PDF
Vuu 07 06 23
PDF
Юрий Трухин (InfoboxCloud)
PDF
Домашняя л/р "Испарение"
XLS
Investor Day Report @ Internet Ukraine 2009
PPSX
Xen App Sergey Kh
PPT
Вебинар компании VMC по продуктам Parallels 2009
PDF
PDF
Экспресс анализ лоты ФАИТа 2008 V4 2
PDF
Global Compact Performance Model
PDF
Бизнес 2.0: инновации в интернете(Сергей Панарин, ACTIVITI)
DOC
положение о правилах пользования библиотекой
PPTX
плавание
PDF
Slide analyst
PPSX
Проблема внутриутробного инфицирования в современном акушерстве
PDF
Нестандартные приемы программирования на Delphi
DOC
Менежментийн үндэс хичээлийн батлах шалгалтын асуултууд
PDF
Result File
проектная деятельность.
WUD2008 - Михаил Матвеев, Данила Корнев - Использование контекстной информаци...
 
Vuu 07 06 23
Юрий Трухин (InfoboxCloud)
Домашняя л/р "Испарение"
Investor Day Report @ Internet Ukraine 2009
Xen App Sergey Kh
Вебинар компании VMC по продуктам Parallels 2009
Экспресс анализ лоты ФАИТа 2008 V4 2
Global Compact Performance Model
Бизнес 2.0: инновации в интернете(Сергей Панарин, ACTIVITI)
положение о правилах пользования библиотекой
плавание
Slide analyst
Проблема внутриутробного инфицирования в современном акушерстве
Нестандартные приемы программирования на Delphi
Менежментийн үндэс хичээлийн батлах шалгалтын асуултууд
Result File
Ad

Viewers also liked (7)

PDF
Поиск нечетких дубликатов видео
PDF
Методология поиска и идентификации нечетких дубликатов видеоизображений
PDF
Распределенная статистическая система машинного перевода (Distributed statist...
PDF
Распределенная статистическая система машинного перевода (Distributed statist...
PDF
Black Swan Theory
PDF
Study: The Future of VR, AR and Self-Driving Cars
PDF
Hype vs. Reality: The AI Explainer
Поиск нечетких дубликатов видео
Методология поиска и идентификации нечетких дубликатов видеоизображений
Распределенная статистическая система машинного перевода (Distributed statist...
Распределенная статистическая система машинного перевода (Distributed statist...
Black Swan Theory
Study: The Future of VR, AR and Self-Driving Cars
Hype vs. Reality: The AI Explainer
Ad

Recently uploaded (6)

PPTX
Presentation on chemistry class 11 and class 12
PDF
Materi seni rupa untuk sekolah dasar materi tentang seni rupa
PDF
Cold positive punishment of the student سزادانی ئەرێنی ساردی قوتابی.pdf
PPTX
Madison dsfnsd dslsf sada;sdmas;ds;dls.pptx
PDF
فورمولر عمومی مضمون فزیک برای همه انجنیران
PDF
کاریگەری دەربرێنی خۆش و دەربڕێنی ناخۆش لەسەر خوێندکار لە چووارچێوەی بەرێوەبرد...
Presentation on chemistry class 11 and class 12
Materi seni rupa untuk sekolah dasar materi tentang seni rupa
Cold positive punishment of the student سزادانی ئەرێنی ساردی قوتابی.pdf
Madison dsfnsd dslsf sada;sdmas;ds;dls.pptx
فورمولر عمومی مضمون فزیک برای همه انجنیران
کاریگەری دەربرێنی خۆش و دەربڕێنی ناخۆش لەسەر خوێندکار لە چووارچێوەی بەرێوەبرد...

C++ with DB

  • 1. Программируемый клиент ORACLE Технология Pro C/C++
  • 2. Два вида программного интерфейса Предкомпилятор CALL - интерфейс
  • 3. Достоинства и недостатки подходов СПРАВОЧНИК ВЫЗОВОВ Call – интерфейс требует детального знания процедур и функций : названия ; количество пар-ров; тип параметров; знание кодов возврата; обработка исключительных ситуаций; и т.п. Время и трудозатраты на разработку - возрастает ПРЕДКОМПИЛЯТОР Использовать проще : наглядность; понятность; структурированность Однако, мобильность программ – меньше, так как требуется предкомпилятор Oracle , позволяющий строить код исходной программы на С / С++, Fortran, Ada, Cobol, Pascal и др.
  • 4. Возможности предкомпиляции Один вызов к Oracle автоматически преобразуется в несколько вызовов процедур(функций). Одна программа может применяться для работы с разными БД Несколько программ могут быть отдельно предкомпилированы и совместно выполнены (собраны).
  • 6. Правила и соглашения технологии Pro C/C++ В программу на Pro C/C++ может быть включен любой оператор SQL Перед всеми операторами SQL ставится префикс EXEC SQL ( для некоторых уникальных конструкций EXEC ORACLE). Операторы SQL делятся на декларативные и выполняемые. После исполнения выполняемых операторов коды возврата заносятся в SQLCA Декларативные операторы не изменяют SQLCA
  • 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”, &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; }