日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 >

什么是Pro*C/C++,嵌入式SQL,第一个pro*c程序,pro*c++,Makefile,Proc增删改查

發(fā)布時(shí)間:2024/9/27 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 什么是Pro*C/C++,嵌入式SQL,第一个pro*c程序,pro*c++,Makefile,Proc增删改查 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.


1 什么是Pro*C/C++

1、通過在過程編程語言C/C++中嵌入SQL語句而開發(fā)出的應(yīng)用程序

2、什么是嵌入式SQL

1、在通用編程語言中使用的SQL稱為嵌入式SQL

2、在SQL標(biāo)準(zhǔn)中定義了很多中語言的嵌入式SQL

3、各個(gè)廠商對(duì)嵌入式SQL的具體實(shí)現(xiàn)不同

3、什么是Pro*C/C++

1、在C/C++語言中嵌入SQL語句而開發(fā)出的應(yīng)用程序。

2、目的:使c/c++這種效率語言稱為訪問數(shù)據(jù)庫的工具。

4、嵌入式SQL的載體是宿主語言

宿主語言?? ?? ????Pro程序

C/C++ ?????????? ? Pro*C/C++

FORTRAN??????? ?? Pro*FORTRAN

PASCAL??????????? Pro*PASCAL

COBOL??????????? ??????? Pro*COBOL

PL/I???? ??????????? Pro*PL/I

Ada? ??????????? Pro*Ada

5、訪問數(shù)據(jù)庫的方法

1)用SQL * Plus,它有SQL命令以交互的應(yīng)用程序訪問數(shù)據(jù)庫;

2)用第四代語言應(yīng)用開發(fā)工具開發(fā)的應(yīng)用程序訪問數(shù)據(jù)庫,這些工具有SQL*FromsQL*Reportwriter,SQL*Menu.

3)利用在第三代語言嵌入的SQL語言或ORACLE庫函數(shù)來調(diào)用來訪問。訪問oracle數(shù)據(jù)庫的方法。

其它:

6、第一個(gè)pro*C程序

A?? 在進(jìn)行pro*c程序開發(fā)的時(shí)候,要配置/home/oracle_11/app/oracle/product/11.2.0/db_1/precomp/admin下的pcscfg.cfg

上面的配置是一個(gè)正確的配置。

B?? 創(chuàng)建dm01_hello.pc

文件內(nèi)容如下:

依賴的頭文件:

/home/oracle_11/app/oracle/product/11.2.0/db_1/precomp/public下的SQLCA.H

dm01_hello.pc文件內(nèi)容(使用UE工具,保存后即可通過FTP上傳到服務(wù)器上)

#include <stdio.h>

#include <string.h>

#include "sqlca.h"

?

//定義宿主變量 serverid

EXEC SQL BEGIN DECLARE SECTION;

? //格式:用戶名/用戶密碼@服務(wù)器名

char *serverid = "scott/123456@orcl";

EXEC SQL END DECLARE SECTION;

?

int main()

{

???????? int ret? = 0;

???????? printf("hello....\n");

???????? //C中是宿主變量

???????? printf("serverid:%s \n", serverid);

???????? //嵌入式SQL語言必須要以 EXEC SQL開頭

???????? //:serverid 加上:表示使用這個(gè)變量

???????? EXEC SQL connect :serverid;

????????

???????? if (sqlca.sqlcode != 0)

???????? {

?????????????????? ret = sqlca.sqlcode;

?????????????????? printf("EXEC SQL connect:err, %d\n", ret);

?????????????????? return ret;

???????? }

???????? printf("connect ok\n");

???????? return ret;

}

編譯并運(yùn)行:dm01_hello.pc,執(zhí)行的命令是:proc dm01_hello.pc

接著生成.out文件。

?

注意一個(gè)錯(cuò)誤1

出現(xiàn)上面的錯(cuò)誤的原因是沒有引入共享庫,要按照下面的方式執(zhí)行:

gcc dm01_hello.c -o dm01_hello? -I/home/oracle_11/app/oracle/product/11.2.0/db_1/precomp/public -L/home/oracle_11/app/oracle/product/11.2.0/db_1/lib –lclntsh

上面的是引入clntsh.so這個(gè)共享庫

?

注意錯(cuò)誤2

[oracle@localhost day03]$ ./dm01_hello

hello....

serverid:scott/123456@orcl

EXEC SQL connect:err, -12541

可以通過下面的命令查看錯(cuò)誤原因:

oerr ora 12541?? (這個(gè)錯(cuò)誤是因?yàn)楸O(jiān)聽未啟動(dòng))

這時(shí)候要:

sqlplus /nolog

conn /as sysdba

startup

quit

在執(zhí)行:

lsnrctl start?? (可以通過ps –u oracle命令查看oracle相關(guān)啟動(dòng)服務(wù))

再執(zhí)行的時(shí)候就不會(huì)出現(xiàn)錯(cuò)誤了。

7?PreCompile編譯器預(yù)編譯程序

1、該工具在什么地方

功能:完成Pro*c源程序到純C源程序的轉(zhuǎn)換

基本命令格式:

PROC INAME=filename [OptionName1=value1]…[OptionNameN=valueN]

常用編譯選項(xiàng):

INAME=path and filename (name of the input file)

ONAME=path and filename (name of the output file)

INCLUDE=path? (頭文件所在路徑)

--INCLUDE =路徑名 INCLUDE =(路徑名1,路徑名2)

PARSE=FULL | PARTIA | NONE (default FULL for C, Others for C++)? 如果想編譯c++,要改成PARTIANONE

CODE=ANSI_C | CPP (default ansi_c)

USERID=username/password

?

8? proc編譯c++文件

默認(rèn)情況下proc是編譯 .c 文件的。要想編譯c++文件,需要執(zhí)行類似下面的操作:

proc iname=./dm02_hello.pconame=dm02_hello.cc PARSE=NONE CODE=CPP

#include <iostream>

#include <stdio.h>

#include <string.h>

#include "sqlca.h"

?

using namespace std;

?

//定義宿主變量 serverid

EXEC SQL BEGIN DECLARE SECTION;

??? char *serverid = "scott/123456@orcl";

EXEC SQL END DECLARE SECTION;

?

int main()

{

??? int ret = 0;

???????? cout << "hello..." << endl;

????????

???????? //C中宿主變量

???????? printf("serverid:%s \n",serverid);

???????? //嵌入式SQL語言必須要以EXEC SQL開頭

???????? //:serverid 要引用serverid時(shí),要使用:

???????? EXEC SQL connect :serverid;

???????? if(sqlca.sqlcode != 0)

???????? {

???????? ??? ret = sqlca.sqlcode;

?????????????????? printf("EXEC SQL connect:err,%d\n",ret);

?????????????????? return ret;

???????? }

???????? printf("connect ok \n");

???????? return ret;

}

執(zhí)行命令:

proc iname=./dm02_hello.pc oname=dm02_hello.cc PARSE=NONE CODE=CPP

執(zhí)行結(jié)果:

注意上面紅線部分和執(zhí)行C的不相同

接著編譯cc文件:

g++ dm02_hello.cc -o dm02_hello -I/home/oracle_11/app/oracle/product/11.2.0/db_1/precomp/public -L/home/oracle_11/app/oracle/product/11.2.0/db_1/lib –lclntsh

9.編寫一個(gè)最簡單的MakeFile

all:dm01_hello dm02_hello

?

dm01_hello:

???????? @echo 'proc dm01_hello begin'

???????? proc dm01_hello.pc

???????? @echo 'gcc dm01_hello begin'

???????? gcc dm01_hello.c -o dm01_hello -I${ORACLE_HOME}/precomp/public -L${ORACLE_HOME}/lib -lclntsh

?

dm02_hello:

???????? @echo 'proc dm02_hello begin'

???????? proc iname=./dm02_hello.pc oname=dm02_hello.cc PARSE=NONE CODE=CPP

???????? @echo 'gcc dm02_hello begin'

???????? g++ dm02_hello.cc -o dm02_hello -I${ORACLE_HOME}/precomp/public -L${ORACLE_HOME}/lib -lclntsh

?

clean:

???????? @rm dm01_hello

???????? @rm dm02_hello

執(zhí)行命令:

make

10 數(shù)據(jù)庫的增刪改查:

編寫公共的Makefile

all: dm01_dbop

?

dm01_dbop:

???????? @echo 'proc dm01_dbop begin'

???????? proc dm01_dbop.pc

???????? @echo 'gcc dm01_dbop begin'

???????? gcc dm01_dbop.c -o dm01_dbop? -I${ORACLE_HOME}/precomp/public -L${ORACLE_HOME}/lib –lclntsh

?

clean:

???????? @rm dm01_dbop

插入數(shù)據(jù):

#include <stdio.h>

#include <string.h>

#include <string.h>

#include "sqlca.h"

?

//定義宿主變量 serverid

EXEC SQL BEGIN DECLARE SECTION? ;

???????? char *serverid = "scott/tiger@orcl";

???????? int????????????? deptno;

???????? char ??????? dname[20];

???????? char loc[20]????? ;

????????

???????? int????????????? deptno2;

???????? char ??????? dname2[20];

???????? char loc2[20]??? ;

EXEC SQL END DECLARE SECTION;

?

int main()

{

???????? int ret? = 0;

???????? printf("hello....\n");

???????? //C中是宿主變量

???????? printf("serverid:%s \n", serverid);

???????? //嵌入式SQL語言必須要以 EXEC SQL開頭

???????? //:serverid

???????? EXEC SQL connect :serverid;

???????? if (sqlca.sqlcode != 0)

???????? {

?????????????????? ret = sqlca.sqlcode;

?????????????????? printf("EXEC SQL connect:err, %d\n", ret);

?????????????????? return ret;

???????? }

???????? printf("connect ok\n");

????????

???????? deptno = 50;

???????? strcpy(dname, "50name");

???????? strcpy(loc, "50loc");

????????

???????? //增加數(shù)據(jù)

???????? EXEC SQL insert into dept (deptno, dname, loc)????? values(:deptno, :dname, :loc);

???????? EXEC SQL commit;

????????

???????? EXEC SQL COMMIT? RELEASE; //提交事務(wù)斷開連接

???????? return ret;

}

運(yùn)行結(jié)果:

刪除

Makefile

#include <stdio.h>

#include <string.h>

#include <string.h>

#include "sqlca.h"

?

//定義宿主變量 serverid

EXEC SQL BEGIN DECLARE SECTION? ;

???????? char *serverid = "scott/tiger@orcl";

???????? int????????????? deptno;

???????? char ??????? dname[20];

???????? char loc[20]????? ;

????????

???????? int????????????? deptno2;

???????? char ??????? dname2[20];

???????? char loc2[20]??? ;

EXEC SQL END DECLARE SECTION;

?

int main()

{

???????? int ret? = 0;

???????? printf("hello....\n");

???????? //C中是宿主變量

???????? printf("serverid:%s \n", serverid);

???????? //嵌入式SQL語言必須要以 EXEC SQL開頭

???????? //:serverid

???????? EXEC SQL connect :serverid;

???????? if (sqlca.sqlcode != 0)

???????? {

?????????????????? ret = sqlca.sqlcode;

?????????????????? printf("EXEC SQL connect:err, %d\n", ret);

?????????????????? return ret;

???????? }

???????? printf("connect ok\n");

????????

???????? deptno = 50;

???????? strcpy(dname, "50name");

???????? strcpy(loc, "50loc");

????????

???????? EXEC SQL delete from dept where deptno=:deptno;

???????? EXEC SQL commit;

????????

???????? EXEC SQL COMMIT? RELEASE; //提交事務(wù)斷開連接

???????? return ret;

}

運(yùn)行結(jié)果:

更新:

Makefile公用上面的

#include <stdio.h>

#include <string.h>

#include <string.h>

#include "sqlca.h"

?

//定義宿主變量 serverid

?

EXEC SQL BEGIN DECLARE SECTION? ;

???????? char *serverid = "scott/tiger@orcl";

???????? int????????????? deptno;

???????? char ??????? dname[20];

???????? char loc[20]????? ;

????????

???????? int????????????? deptno2;

???????? char ??????? dname2[20];

???????? char loc2[20]??? ;

????????

EXEC SQL END DECLARE SECTION;

?

//更新

int main()

{

????????

???????? int ret? = 0;

???????? printf("hello....\n");

???????? //C中是宿主變量

???????? printf("serverid:%s \n", serverid);

???????? //嵌入式SQL語言必須要以 EXEC SQL開頭

???????? //:serverid

???????? EXEC SQL connect :serverid;

???????? if (sqlca.sqlcode != 0)

???????? {

?????????????????? ret = sqlca.sqlcode;

?????????????????? printf("EXEC SQL connect:err, %d\n", ret);

?????????????????? return ret;

???????? }

???????? printf("connect ok\n");

????????

???????? deptno = 50;

???????? strcpy(dname, "50name");

???????? strcpy(loc, "50loc");

????????

????????

???????? //增加數(shù)據(jù)

???????? EXEC SQL insert into dept (deptno, dname, loc)????? values(:deptno, :dname, :loc);

???????? EXEC SQL commit;

????????

???????? printf("enter key ... update \n");

???????? getchar();

???????? getchar();

???????? strcpy(loc, "50locloc");

????????

???????? EXEC SQL? update dept set loc = :loc? where deptno=:deptno;

????????

???????? //EXEC SQL delete from dept where deptno=:deptno;

????????

???????? EXEC SQL COMMIT? RELEASE; //提交事務(wù)斷開連接

?

???????? return ret;

}

執(zhí)行結(jié)果:

數(shù)據(jù)庫中的結(jié)果:

查詢并顯示結(jié)果:

#include <stdio.h>

#include <string.h>

#include <string.h>

#include "sqlca.h"

?

//定義宿主變量 serverid

?

EXEC SQL BEGIN DECLARE SECTION? ;

???????? char *serverid = "scott/123456@orcl";

???????? int????????????? deptno;

???????? char ??????? dname[20];

???????? char loc[20]????? ;

????????

???????? int????????????? deptno2;

???????? char ??????? dname2[20];

???????? char loc2[20]??? ;

????????

EXEC SQL END DECLARE SECTION;

?

//獲取

int main()

{

????????

???????? int ret? = 0;

???????? printf("hello....\n");

???????? //C中是宿主變量

???????? printf("serverid:%s \n", serverid);

???????? //嵌入式SQL語言必須要以 EXEC SQL開頭

???????? //:serverid

???????? EXEC SQL connect :serverid;

???????? if (sqlca.sqlcode != 0)

???????? {

?????????????????? ret = sqlca.sqlcode;

?????????????????? printf("EXEC SQL connect:err, %d\n", ret);

?????????????????? return ret;

???????? }

???????? printf("connect ok\n");

????????

???????? deptno = 50;

???????? strcpy(dname, "50name");

???????? strcpy(loc, "50loc");

????????

????????

???????? EXEC SQL select deptno, dname, loc into? :deptno2, :dname2, :loc2? from dept where deptno=:deptno;

????????

???????? printf("%d, %s, %s\n", deptno2, dname2, loc2);

????????

???????? EXEC SQL COMMIT? RELEASE; //提交事務(wù)斷開連接

?

???????? return ret;

}

?

?

?

?

?

?

?

?

?

?

?

總結(jié)

以上是生活随笔為你收集整理的什么是Pro*C/C++,嵌入式SQL,第一个pro*c程序,pro*c++,Makefile,Proc增删改查的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。