proc/c++(一) 快速上手

一、概念:

pro程序:通過在過程化編程語言中 嵌入sql語句開發出的應用程序叫pro程序。

宿主語言:sql語句所嵌入的語言。
proc   proc++目的:使c 或者 c++ 這種高效的語言成爲訪問oracle數據
的工具。

二、例子

連接數據庫

方式一:exec sql  connect:用戶名 identified by  密碼;
方式二:exec sql  connect:用戶名/密碼; 
b 查詢數據
exec sql  select  字段 into 變量  from  表
    where  條件;
c 斷開數據庫連接
exec sql  commit  work release;

linux上寫一個proc程序的步驟
1.編寫源代碼
  vi     ***.pc 
2.預編譯    把pc文件變成c文件
  proc   ***.pc 
3.編譯  鏈接
  gcc    ***.c   -lclntsh
  gcc    ***.c   -lorasql10 (windows)
4.執行
  ./a.out

一個例子

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "util.h"
#include <sqlca.h>
EXEC SQL INCLUDE SQLCA; (1)
int main()
{
    EXEC SQL BEGIN DECLARE SECTION;// (2)
    char firstname[13];
    char userid[9]="open123";
    char passwd[19]="open";
    EXEC SQL END DECLARE SECTION;
    EXEC SQL CONNECT:userid identify by passwd; //(3)
    EXEC SQL SELECT FIRSTNME INTO :firstname   // (4) 
    FROM employee
    WHERE LASTNAME = 'JOHNSON'; //(4)
    printf( "First name = %s\n", firstname );
    EXEC SQL CONNECT RESET; //(5)
    return 0;
}

上面是一個簡單的靜態嵌入SQL語句的應用程序。它包括了嵌入SQL的主要部分:
(1)中的include SQLCA語句定義並描述了SQLCA的結構。SQLCA用於應用程序和數據庫之間的通訊,其中的SQLCODE返回SQL語句執行後的結果狀態。
(2)在BEGIN DECLARE SECTION和END DECLARE SECTION之間定義了宿主變量。宿主變量可被SQL語句引用,也可以被C語言語句引用。它用於將程序中的數據通過SQL語句傳給數據庫管理器,或從數據庫管理器接收查詢的結果。在SQL語句中,主變量前均有“:”標誌以示區別。
(3)在每次訪問數據庫之前必須做CONNECT操作,以連接到某一個數據庫上。這時,應該保證數據庫實例已經啓動。
(4)是一條選擇語句。它將表employee中的LASTNAME爲“JOHNSON”的行數據的FIRSTNAME查出,並將它放在firstname變量中。該語句返回一個結果。可以通過遊標返回多個結果。當然,也可以包含update、insert和delete語句。
(5)最後斷開數據庫的連接。
從上例看出,每條嵌入式SQL語句都用EXEC SQL開始,表明它是一條SQL語句。這也是告訴預編譯器在EXEC SQL和“;”之間是嵌入SQL語句。如果一條嵌入式SQL語句佔用多行,在C程序中可以用續行符“\”

proc  的預編譯選項
和c++相關的
oname   默認生成是.c文件 如果改成c++的需要制定成.cpp
iname   輸入文件名  可以省略
parse   解析方式  默認是full c的方式.  c++ 推薦的方式:none   嚴格的c++解析:partia ( 不推薦使用)
code    默認是ansi_c .   c++ 使用 cpp

proc++ 例子

#include <iostream>
using namespace std;
exec sql  include sqlca;
int main(){
		exec sql  begin declare section;
    char  userpasswd[30]="openlab/open123";
		char  var_name[30];
		exec sql  end   declare section;
		/* 連接數據庫 */
		exec sql  connect:userpasswd;
    /* 查詢s_emp表中的 first_name id=1 */
		exec sql  select  first_name into 
				:var_name from s_emp where id=1;
		cout<<"var_name="<<var_name<<endl;
		exec sql  commit work release;
}
預編譯:

proc  iname=second.pc  oname=second.cpp 

    parse=none code=cpp 

編譯:g++   second.cpp   -lclntsh

執行:

./a.out

注意:

.c++  要求把所有的在sql中使用的變量 放入申明區

c語言 在linux  和unix 下不用把在sql中使用的變量
放入申明區。c++ 無論在哪個系統下都需要把這些變量
放入申明區。
exec sql  begin declare section;
    /* 這就是申明區 */
exec sql  end   declare section;

三 宿主變量

既能在sql語句中使用,又能在宿主語言中使用.

1.宿主變量的類型
  char 
  char    var[n]  定長字符串
  short   
  int 
  long
  float
  double
  varchar  var[n]  變長字符串
  
  a.變長字符串的使用
    varchar   var_name[n]={0};
    在sql語句中 和定長字符串沒有區別
    exec sql select first_name into :var_name
        from s_emp where id=1;
    在c中訪問數據需要使用 .arr
    printf("var_name=%s\n",var_name.arr);
    可以得到放入變長字符 數據的長度
    var_name.len
    在數據的之後 設置一個\0
    var_name.arr[var_name.len]='\0';
  b.處理變長字符串的方式2 
    使用 char_map=charz 定長處理  空格補齊 \0結尾
                 =charf|varchar2  定長 空格補齊
=string 變長  \0結尾 
   eg:   proc  charn.pc  char_map=string     //這樣就可以將charn.pc程序中的所有定長字符串變成 變長字符串了。
 2.宿主變量的注意事項
   1.強烈推薦把宿主變量放入申明區
     exec sql  begin declare section;
     exec sql  end   declare section;
   2.宿主變量可以使用指針   不推薦使用
   3.DDL中不能使用宿主變量
   4.在sql中使用宿主變量時 推薦加上冒號
     exec sql  select  first_name into :var_name 
         where id=:id;
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章