目录:
Pro * c程序的编写步骤
宿主变量
指示变量
变量
通信区
1个Pro * c程序的编写步骤
1.1问题
Pro * C / C ++程序就是在C / C ++语言中嵌入SQL语句而开发出的应用程序。
使c / c ++这种高效率语言成为访问数据库的工具
1.2步骤
实现此案例需要按照如下步骤进行。
1,编写源代码
vi ***。pc
2,预编译把pc文件变成c文件
proc ***。pc
3,编译链接
gcc ***。c -lclntsh
gcc ***。c -lorasql10(Windows)
4,执行
./a.out
2主机变量
2.1问题
套宿主变量是一种pro * c语言变量,用于在应用程序中和oracle数据库之间传递数据。
Pro * C程序中,既可在SQL语句中引用,也可在C语句中引用的变量称为SQL变量。
宿主变量和C语言程序中变量区别不去,分别有数据类型char,char [n],int,short,long,float,double,VARCHAR [n]。
2.2步骤
实现此案例需要按照如下步骤进行。
步骤一:宿主变量使用
代码如下所示:
#include < stdio 。h >
exec sql include sqlca ;
int main (){
char userpasswd [ 30 ] = “ openlab / open123” ;
char var_name [ 30 ];
/ 连接数据库 /
exec sql connect : userpasswd ;
/ *把ssemp id = 1 = first_name加上var_name * /
exec sql select first_name进入: var_name
从s_emp其中id = 1 ;
printf (“ var_name =%s \ n ” , var_name );
exec sql commit工作发布;
}
以上代码中,以下代码:
char var_name [ 30 ];
定义宿主变量。
以上代码中,以下代码:
exec sql select first_name进入: var_name
从s_emp其中id = 1 ;
使用PLSQL语句将查询出来的结果存入定义的宿主变量中。
3指示变量
3.1问题
宿主变量用于接收数据库的返回数据。
通过在宿主变量后用指示变量,检测是否返回了NULL。
-1:数据库表列的变量为空,指示变量相关联的输出宿主变量值不确定。
= 0:Oracle将数据库表列值原封不动的赋值给指针变量相关联的输出托管变量。
(0:Oracle将数据库表列值截断后赋给指针变量相关联的输出缓存变量,变量变量该该列值的原始长度。
3.2步骤
实现此案例需要按照如下步骤进行。
步骤一:指示变量
代码如下所示:
#include < stdio 。h >
exec sql include sqlca ;
int main (){
exec sql开始声明部分;
char userpasswd [ 30 ] = “ openlab / open123” ;
int mid = -2 ;
/ 定义一个指示变量指示赋值状态 /
短indmid = 0 ;
exec sql end声明部分;
exec sql connect : userpasswd ;
exec sql选择manager_id到: mid : indmid
从s_emp其中id = 2 ;
printf (“ mid =%d,indmid =%hd \ n ” , mid , indmid );
exec sql commit工作发布;
}
上述代码中,以下代码:
int mid = -2 ;
定义临时变量用于存放从数据库表中读取出来的数据。
上述代码中,以下代码:
短indmid = 0 ;
准备指示变量,用于检测数据读取。
4变量变量
4.1问题
Pro * C只支持一维数组,所支持的数组最大维数是32767,超过此限制将报错。不支持数组指针。
在SQL语句中使用布局变量,只需引入:名称,不要给下标。
4.2步骤
实现此案例需要按照如下步骤进行。
步骤一:相对变量
代码如下所示:
#include < stdio 。h >
exec sql include sqlca ;
int main (){
exec sql开始声明部分;
char userpasswd [ 30 ] = “ openlab / open123” ;
/ 定义manager_id和first_name副本 /
中位数[ 50 ];
字符名称[ 50 ] [ 30 ];
/ 定义指标表格 /
短篇小说[ 50 ];
exec sql end声明部分;
exec sql connect : userpasswd ;
exec sql select manager_id , first_name
到: mids : indmids ,: s_emp中的名字;
/ 遍历时间表 /
int i = 0 ;
为(我= 0 ;我< SQLCA 。 SQLERRD [ 2 ];我++){
printf (“%s:%d:%hd \ n ” ,名称[ i ], mids [ i ],
indmids [ i ]);
}
exec sql commit工作发布;
}
上述代码中,以下代码:
中位数[ 50 ];
字符名称[ 50 ] [ 30 ];
定义两个变量变量,用于保存从数据库表中读取出来的信息。
上述代码中,以下代码:
短篇小说[ 50 ];
准备指标清单,以便确定manager_id的每次重新阅读是否有误。
上述代码中,以下代码:
exec sql select manager_id , first_name
到: mids : indmids ,: s_emp中的名字;
读取数据库数据,将重新读取到数据存储入矩阵和名称中保存,插入索引的数组中值存储中值索引器变量的值。
上述代码中,以下代码:
为(我= 0 ;我< SQLCA 。 SQLERRD [ 2 ];我++){
printf (“%s:%d:%hd \ n ” ,名称[ i ], mids [ i ],
indmids [ i ]);
}
将两个副本中保存的数据循环打印到屏幕上。
5通信区
5.1问题
SQLCA是ORACLE提供的两个通信区之一。
SQLCA实际上是一个结构变量,其目的是为了诊断错误和事件处理结果。
当需要更多进一步的信息时,ORACA将帮助我们达成愿望,所以ORACA也可以针对时SQLCA的补充和辅助
5.2步骤
实现此案例需要按照如下步骤进行。
步骤一:SQLCA
代码如下所示:
#include < stdio 。h >
exec sql include sqlca ;
int main (){
exec sql开始声明部分;
char userpasswd [ 30 ] = “ openlab / open123” ;
/ 定义manager_id和first_name副本 /
中位数[ 50 ];
字符名称[ 50 ] [ 30 ];
/ 定义指标表格 /
短篇小说[ 50 ];
exec sql end声明部分;
exec sql connect : userpasswd ;
如果( SQLCA 。 SQLCODE == 0 ){
printf (“连接数据库成功!\ n ” );
}
exec sql select manager_id , first_name
到: mids : indmids ,: s_emp中的名字;
如果( SQLCA 。 SQLCODE == 0 ){
printf (“选择数据库成功!\ n ” );
} 其他{
的printf (“%S \ n ” , SQLCA 。 SQLERRM 。则sqlerrmc );
}
/ 遍历时间表 /
int i = 0 ;
为(我= 0 ;我< SQLCA 。 SQLERRD [ 2 ];我++){
printf (“%s:%d:%hd \ n ” ,名称[ i ], mids [ i ],
indmids [ i ]);
}
exec sql commit工作发布;
}
上述代码中,以下代码:
如果( SQLCA 。 SQLCODE == 0 ){
printf (“连接数据库成功!\ n ” );
}
sqlcode保存最近一次运行SQL指令的状态,查看上一条SQL语句是否执行成功,成功则返回0。
上述代码中,以下代码:
exec sql select manager_id , first_name
到: mids : indmids ,: s_emp中的名字;
如果( SQLCA 。 SQLCODE == 0 ){
printf (“选择数据库成功!\ n ” );
} 其他{
的printf (“%S \ n ” , SQLCA 。 SQLERRM 。则sqlerrmc );
}
sqlcode保存最近一次运行SQL指令的状态,已查看上一条SQL语句是否已执行成功,成功则返回0,失败则打印sql的错误文本信息。
上述代码中,以下代码:
为(我= 0 ;我< SQLCA 。 SQLERRD [ 2 ];我++){
printf (“%s:%d:%hd \ n ” ,名称[ i ], mids [ i ],
indmids [ i ]);
}
将正确查询出来保存到副本的信息打印到屏幕上。
步骤二:ORACA
代码如下所示:
#include < stdio 。h >
exec sql include sqlca ;
exec sql include oraca ;
exec oracle 选项( oraca = yes );
int main (){
exec sql开始声明部分;
char userpasswd [ 30 ] = “ openlab / open123” ;
char var_name [ 30 ];
int id = 1 ;
exec sql end声明部分;
Oraca 。orastxtf = 3 ;
exec sql connect : userpasswd ;
exec sql select first_name进入: var_name
从s_emp其中id =: id ;
的printf (“%S” , ORACA 。 orastxt 。 orastxtc );
exec sql commit工作发布;
}
上述代码中,以下代码:
exec sql include oraca ;
exec oracle 选项( oraca = yes );
包含ORACA并打开。
上述代码中,以下代码:
Oraca 。orastxtf = 3 ;
设置ORACA为任何情况都保存sql文本。
上述代码中,以下代码:
exec sql select first_name进入: var_name
从s_emp其中id =: id ;
的printf (“%S” , ORACA 。 orastxt 。 orastxtc );
先执行SQL的选择语句,然后调用oraca.orastxt.orastxtc打印出保存的SQL文本。