SlideShare ist ein Scribd-Unternehmen logo
1 von 19
Downloaden Sie, um offline zu lesen
Программируемый клиент
       ORACLE
    Технология Pro C/C++
Два вида программного
          интерфейса
• Предкомпилятор
• CALL- интерфейс
Достоинства и недостатки
             подходов
СПРАВОЧНИК ВЫЗОВОВ                      ПРЕДКОМПИЛЯТОР
 Call –интерфейс требует детального
       интерфейс                        Использовать проще:
    знания процедур и функций:
                                      • наглядность;
• названия;
                                      • понятность;
• количество пар-ров;
                пар ров;
• тип параметров;                     • структурированность
• знание кодов возврата;                Однако, мобильность
• обработка исключительных              программ – меньше, так как
    ситуаций;                           требуется предкомпилятор
• и т.п.                                Oracle, позволяющий строить
Время и трудозатраты на разработку      код исходной программы на
    - возрастает                        С/С++, Fortran, Ada, Cobol,
                                        Pascal и др.
Возможности предкомпиляции
• Один вызов к Oracle автоматически
  преобразуется в несколько вызовов
      б
  процедур(функций).
• Одна программа может применяться для
  р
  работы с разными БД
           р         Д
• Несколько программ могут быть
  отдельно предкомпилированы и
  совместно выполнены (собраны).
Этапы разработки приложений
                 Создание программы
                     на ProC/C++
                        ( pc)
                        (*.pc)


              Предкомпиляция программы
                   в файл на С/С++
                     ф
                     (*.c или *.cpp)


отладка
    д        Компиляция исходника на С/С++
          любым компиллятором стандарта ANSI
            б


                Сборка объектных файлов
           с подключением библиотек ORACLE
                         (*.exe)


                Выполнение программы
                            р р
Правила и соглашения
          технологии Pro C/C
                         C/C++
•   В программу на Pro C/C++ может быть включен любой оператор
    SQL
•   Перед всеми операторами SQL ставится префикс EXEC    SQL
•   ( для некоторых уникальных конструкций EXEC ORACLE).
                                                ORACLE)
•   Операторы SQL делятся на декларативные и выполняемые.
•   После исполнения выполняемых операторов коды возврата
    заносятся в SQLCA
•   Декларативные операторы не изменяют SQLCA
Структура программы на Pro
          C/C
          C/C++
  Секция
  С                 INCLUDE             CONNECT
 DECLARE             SQLCA


                     Пролог
                   программы


                  Тело программы
           Обращение к ORACLE SERVER,
              действия с переменными


                     Эпилог
                   программы


           FREE MEMORY   DISCONNECT
Секция DECLARE
•   Единственная
•   Может иметь локальную или глобальную видимость

EXEC SQL BEGIN DECLARE SECTION;
Описание переменных обмена данными
EXEC SQL END DECLARE SECTION;
Пример

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 запросах
используется символ ‘:’, перед именем переменной.
       у               , р              р
Для строк переменной длины в секции 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 – указатель на массив содержимого
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
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;
………….
Тело программы
• Cтандартные операторы языка C/C++ ;
• Операторы SQL (select,delete,insert,update);
                 (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!
                     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!
Оператор COMMIT WORK завершает транзакцию

EXEC SQL COMMIT WORK;

Оператор COMMIT WORK RELEASE осуществляет
DISCONNECT

EXEC SQL COMMIT WORK RELEASE;
Пример программы, которая позволяет задать ( с клавиатуры ) номера сотрудников и их оклады, а
затем добавляет эти данные в таблицу
#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;
}

Weitere ähnliche Inhalte

Was ist angesagt?

WUD2008 - Михаил Матвеев, Данила Корнев - Использование контекстной информаци...
WUD2008 - Михаил Матвеев, Данила Корнев - Использование контекстной информаци...WUD2008 - Михаил Матвеев, Данила Корнев - Использование контекстной информаци...
WUD2008 - Михаил Матвеев, Данила Корнев - Использование контекстной информаци...
wud
 
Vuu 07 06 23
Vuu 07 06 23Vuu 07 06 23
Vuu 07 06 23
dorlov
 
Вебинар компании VMC по продуктам Parallels 2009
Вебинар компании VMC по продуктам Parallels 2009Вебинар компании VMC по продуктам Parallels 2009
Вебинар компании VMC по продуктам Parallels 2009
areconster
 
Xen App Sergey Kh
Xen App Sergey KhXen App Sergey Kh
Xen App Sergey Kh
Liudmila Li
 
TMPA-2013 Conference Proceedings
TMPA-2013 Conference ProceedingsTMPA-2013 Conference Proceedings
TMPA-2013 Conference Proceedings
Iosif Itkin
 
проектная деятельность.
проектная деятельность.проектная деятельность.
проектная деятельность.
guestffb2e9
 
Economy of project development
Economy of project developmentEconomy of project development
Economy of project development
Ontico
 
Highload sites, master-class, OK-2009
Highload sites, master-class, OK-2009Highload sites, master-class, OK-2009
Highload sites, master-class, OK-2009
Ontico
 
02 Citrus Systems S Pb
02 Citrus Systems S Pb02 Citrus Systems S Pb
02 Citrus Systems S Pb
Liudmila Li
 

Was ist angesagt? (18)

WUD2008 - Михаил Матвеев, Данила Корнев - Использование контекстной информаци...
WUD2008 - Михаил Матвеев, Данила Корнев - Использование контекстной информаци...WUD2008 - Михаил Матвеев, Данила Корнев - Использование контекстной информаци...
WUD2008 - Михаил Матвеев, Данила Корнев - Использование контекстной информаци...
 
Vuu 07 06 23
Vuu 07 06 23Vuu 07 06 23
Vuu 07 06 23
 
костин анатолий. методология юзабилити проектирования возможны ли разные ...
костин анатолий. методология юзабилити  проектирования   возможны ли разные  ...костин анатолий. методология юзабилити  проектирования   возможны ли разные  ...
костин анатолий. методология юзабилити проектирования возможны ли разные ...
 
4 24 28
4 24 284 24 28
4 24 28
 
Вебинар компании VMC по продуктам Parallels 2009
Вебинар компании VMC по продуктам Parallels 2009Вебинар компании VMC по продуктам Parallels 2009
Вебинар компании VMC по продуктам Parallels 2009
 
Xen App Sergey Kh
Xen App Sergey KhXen App Sergey Kh
Xen App Sergey Kh
 
TMPA-2013 Conference Proceedings
TMPA-2013 Conference ProceedingsTMPA-2013 Conference Proceedings
TMPA-2013 Conference Proceedings
 
5
55
5
 
3
33
3
 
проектная деятельность.
проектная деятельность.проектная деятельность.
проектная деятельность.
 
Economy of project development
Economy of project developmentEconomy of project development
Economy of project development
 
Internal quality of education
Internal quality of educationInternal quality of education
Internal quality of education
 
4
44
4
 
Highload sites, master-class, OK-2009
Highload sites, master-class, OK-2009Highload sites, master-class, OK-2009
Highload sites, master-class, OK-2009
 
Инновационные технологии Softidea в системе образования, Softidea Vision 2010
Инновационные технологии Softidea в системе образования, Softidea Vision 2010Инновационные технологии Softidea в системе образования, Softidea Vision 2010
Инновационные технологии Softidea в системе образования, Softidea Vision 2010
 
6
66
6
 
02 Citrus Systems S Pb
02 Citrus Systems S Pb02 Citrus Systems S Pb
02 Citrus Systems S Pb
 
Lingvotrainer En101
Lingvotrainer En101Lingvotrainer En101
Lingvotrainer En101
 

Andere mochten auch

Black Swan Theory
Black Swan TheoryBlack Swan Theory
Black Swan Theory
Ilya Nikitin
 

Andere mochten auch (7)

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

Pro C

  • 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; }