Your SlideShare is downloading. ×
Pro C
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

Pro C

558
views

Published on

Published in: Technology, Business

0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
558
On Slideshare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
2
Comments
0
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. Этапы разработки приложений Создание программы на ProC/C++ ( pc) (*.pc) Предкомпиляция программы в файл на С/С++ ф (*.c или *.cpp) отладка д Компиляция исходника на С/С++ любым компиллятором стандарта ANSI б Сборка объектных файлов с подключением библиотек ORACLE (*.exe) Выполнение программы р р
  • 6. Правила и соглашения технологии Pro C/C C/C++ • В программу на Pro C/C++ может быть включен любой оператор SQL • Перед всеми операторами SQL ставится префикс EXEC SQL • ( для некоторых уникальных конструкций EXEC ORACLE). ORACLE) • Операторы SQL делятся на декларативные и выполняемые. • После исполнения выполняемых операторов коды возврата заносятся в SQLCA • Декларативные операторы не изменяют SQLCA
  • 7. Структура программы на Pro C/C C/C++ Секция С INCLUDE CONNECT DECLARE SQLCA Пролог программы Тело программы Обращение к ORACLE SERVER, действия с переменными Эпилог программы FREE MEMORY DISCONNECT
  • 8. Секция DECLARE • Единственная • Может иметь локальную или глобальную видимость EXEC SQL BEGIN DECLARE SECTION; Описание переменных обмена данными EXEC SQL END DECLARE SECTION;
  • 9. Пример EXEC SQL BEGIN DECLARE SECTION; Int I t 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. Пример VARCHAR j[40]; Автоматически порождается Struct { unsigned short int len; i d h ti tl 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 V h oralogpass[40]; l [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); (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! fio id :name :n EXEC SQL SELECT fio,id into :name,:n FROM personal WHERE many = :sal; // неверный оператор y ; р р р 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> <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; 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 %fn” &n[i],&many[i]); ret=scanf(“%d %fn , &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; }