pro程序:
在过程化的编程语言中嵌入sql语句开发出的应用程序
proc 程序
在c语言中嵌入sql语句开发出的应用程序
宿主语言:sql嵌入的语言
c程序的编程步骤:
1.写c的源代码
2.编译
3.链接
4.执行
proc 程序的编程步骤:
0 写pc的源代码
1.预编译 生成 c
2.编译
3.链接
4.执行
proc的预编译选项:
include 指定头文件的位置
iname 输入文件名 可以省略
oname 默认是c
做c++需要指定 oname=***.cpp
parse full 默认的c方式
partia 严格的c++检查 不推荐使用
none c++ 推荐的使用方式
code ansi_c 默认的c风格
cpp c++
源代码写好以后 使用ftp 把代码上传到服务器
proc 指定头文件的位置
需要使用预编译选项
proc ***.pc include='头文件位置'
stddef.h
/usr/lib/gcc-lib/i386-redhat-linux7/2.96/include
本地生成c文件
proc first.pc include='/usr/lib/gcc-lib/i386-redhat-linux7/2.96/include'
本地没有安装oracle
链接时需要使用oracle的库 clntsh
gcc first.c -lclntsh
proc的预编译选项:
include 头文件定位的问题
proc first.pc include='/usr/lib/gcc-lib/i386-redhat-linux7/2.96/include'
iname 输入的文件名是哪一个 这个可以省略
proc iname=first.pc
oname 输出文件名 默认是c文件
如果做c++开发 则需要指定输出文件名 **.cpp
parse 解析方式 默认full 是c语言的
partia 严格的c++检查 不推荐使用
none 在c++中推荐使用
code ansi_c 默认的c方式
cpp c++中使用
补充:如果在proc代码中调用plsql 则需要下面的选项
sqlcheck=semantics
userid=指定的用户名/密码
按照上面的选项做一个c++ 代码
在c++ 中 所有的在sql语句中使用的变量 都要定义在
申明区
exec sql begin declare section;
/*这是申明区*/
exec sql end declare section;
预编译c++文件
proc second.pc oname=second.cpp parse=none code=cpp
上传到服务器编译链接
g++ second.cpp -lclntsh
宿主变量:
既能在sql语句中使用 又能在宿主语言中使用的变量
c++规定 必须把这种变量的定义放在申明区
c中可以不放在申明区(windows 下即使是proc也需要
把宿主变量放在申明区)
推荐以后不管是proc还是proc++都要把宿主变量放在申明区
在sql语句中使用宿主变量时 变量前要加冒号
宿主语言中的变量类型:
char
char par[n] 定长字符串
short
int
long
float
double
varchar par[n] 变长字符串
变长字符串的处理:
变长字符串
在sql语句中 :变量名
在c中 要 变量名.arr
记得要初始化
还有一种变长字符串的处理方式
可以使用proc的预编译选项
char_map=charz 定长 \0结尾 空格补齐
=charf varchar 定长 空格补齐
=string 变长 \0结尾 (动作太大)
proc ***.pc char_map=string
gcc **.c -lclntsh
宿主变量的使用注意事项:
1.推荐宿主变量放在申明区
2.可以使用指针 但使用前要分配空间
不能使用堆分配
3.ddl 不能不能包含宿主变量(不能有冒号)
proc 中可以使用ddl(create drop alter)
plsql 中不能直接使用ddl
exec sql create table test(id number);
exec sql create table :test(id number);//error
指示变量:指示数据表中的字段值赋值给宿主变量时的
赋值状态
指示变量的值有三种情况:
a ==0 赋值正常
b ==-1 可以断定数据库中的字段值是NULL值
c >0 数据库中的字段值截断之后赋值给宿主变量
指示变量的用法:
exec sql select *** into :宿主变量 indicator :指示变量 from *** where ***;
exec sql select *** into :宿主变量:指示变量 from *** where ***;
指示变量 能且只能是short类型
数组变量:
1.只支持一维数组 字符除外
2.不支持数组指针
3.最大 32767 超出报错
使用数组时 只需要给出:数组名 不需要给出下标
/*把s_emp 表中所有的记录值 放入数组中
first_name salary */
exec sql select first_name,salary into :名字数组,
:薪水数组 from s_emp;
数组的使用:
1.出了字符外 都只支持一维数组
2.不支持数组指针
3.最大下标数 32767
sql中使用数组 不能给出下标
指示器数组:
如果需要指示多个数据的赋值状态 可以使用 指示器数组
sql的通信区:
exec sql include sqlca;
宿主语言和数据库做通信使用的一个结构体
sqlca.sqlerrd[2] sql语句影响的行数
sqlca.sqlcode 最近sql执行的状态
==0 sql 语句执行正常
>0 异常发生
<0 网络 或者数据库本身的问题
sqlca.sqlerrm.sqlerrmc sql语句执行出错之后错误原因
oraca 通信区
对sqlca的补充
根据条件输出程序中sql语句
默认是关闭的 非常耗资源
a.包含oraca通信区
exec sql include oraca;
b.打开oraca通信区
exec oracle option(oraca=yes);
c.根据需求 设置sql的标志
oraca.orastxtf
0 不保存sql语句 默认
1 sql语句出现警告 就保存
2 sql语句出错 或者警告时保存
3 无论什么情况 都保存
d. 输出sql 语句
oraca.orastxt.orastxtc
select first_name into :b0 from s_emp where id=:b1
printf("%d:%s",,);
--------------------------------------------------
proc 中如何嵌入sql语句
1.select 语句要和 into 结合使用
2.dml ddl 事务控制 都可以直接使用
3.所有的语句前要加 exec sql
-----------------------------------------------
在proc 中如何调用存储过程和函数
在过程化的编程语言中嵌入sql语句开发出的应用程序
proc 程序
在c语言中嵌入sql语句开发出的应用程序
宿主语言:sql嵌入的语言
c程序的编程步骤:
1.写c的源代码
2.编译
3.链接
4.执行
proc 程序的编程步骤:
0 写pc的源代码
1.预编译 生成 c
2.编译
3.链接
4.执行
proc的预编译选项:
include 指定头文件的位置
iname 输入文件名 可以省略
oname 默认是c
做c++需要指定 oname=***.cpp
parse full 默认的c方式
partia 严格的c++检查 不推荐使用
none c++ 推荐的使用方式
code ansi_c 默认的c风格
cpp c++
源代码写好以后 使用ftp 把代码上传到服务器
proc 指定头文件的位置
需要使用预编译选项
proc ***.pc include='头文件位置'
stddef.h
/usr/lib/gcc-lib/i386-redhat-linux7/2.96/include
本地生成c文件
proc first.pc include='/usr/lib/gcc-lib/i386-redhat-linux7/2.96/include'
本地没有安装oracle
链接时需要使用oracle的库 clntsh
gcc first.c -lclntsh
proc的预编译选项:
include 头文件定位的问题
proc first.pc include='/usr/lib/gcc-lib/i386-redhat-linux7/2.96/include'
iname 输入的文件名是哪一个 这个可以省略
proc iname=first.pc
oname 输出文件名 默认是c文件
如果做c++开发 则需要指定输出文件名 **.cpp
parse 解析方式 默认full 是c语言的
partia 严格的c++检查 不推荐使用
none 在c++中推荐使用
code ansi_c 默认的c方式
cpp c++中使用
补充:如果在proc代码中调用plsql 则需要下面的选项
sqlcheck=semantics
userid=指定的用户名/密码
按照上面的选项做一个c++ 代码
在c++ 中 所有的在sql语句中使用的变量 都要定义在
申明区
exec sql begin declare section;
/*这是申明区*/
exec sql end declare section;
预编译c++文件
proc second.pc oname=second.cpp parse=none code=cpp
上传到服务器编译链接
g++ second.cpp -lclntsh
宿主变量:
既能在sql语句中使用 又能在宿主语言中使用的变量
c++规定 必须把这种变量的定义放在申明区
c中可以不放在申明区(windows 下即使是proc也需要
把宿主变量放在申明区)
推荐以后不管是proc还是proc++都要把宿主变量放在申明区
在sql语句中使用宿主变量时 变量前要加冒号
宿主语言中的变量类型:
char
char par[n] 定长字符串
short
int
long
float
double
varchar par[n] 变长字符串
变长字符串的处理:
变长字符串
在sql语句中 :变量名
在c中 要 变量名.arr
记得要初始化
还有一种变长字符串的处理方式
可以使用proc的预编译选项
char_map=charz 定长 \0结尾 空格补齐
=charf varchar 定长 空格补齐
=string 变长 \0结尾 (动作太大)
proc ***.pc char_map=string
gcc **.c -lclntsh
宿主变量的使用注意事项:
1.推荐宿主变量放在申明区
2.可以使用指针 但使用前要分配空间
不能使用堆分配
3.ddl 不能不能包含宿主变量(不能有冒号)
proc 中可以使用ddl(create drop alter)
plsql 中不能直接使用ddl
exec sql create table test(id number);
exec sql create table :test(id number);//error
指示变量:指示数据表中的字段值赋值给宿主变量时的
赋值状态
指示变量的值有三种情况:
a ==0 赋值正常
b ==-1 可以断定数据库中的字段值是NULL值
c >0 数据库中的字段值截断之后赋值给宿主变量
指示变量的用法:
exec sql select *** into :宿主变量 indicator :指示变量 from *** where ***;
exec sql select *** into :宿主变量:指示变量 from *** where ***;
指示变量 能且只能是short类型
数组变量:
1.只支持一维数组 字符除外
2.不支持数组指针
3.最大 32767 超出报错
使用数组时 只需要给出:数组名 不需要给出下标
/*把s_emp 表中所有的记录值 放入数组中
first_name salary */
exec sql select first_name,salary into :名字数组,
:薪水数组 from s_emp;
数组的使用:
1.出了字符外 都只支持一维数组
2.不支持数组指针
3.最大下标数 32767
sql中使用数组 不能给出下标
指示器数组:
如果需要指示多个数据的赋值状态 可以使用 指示器数组
sql的通信区:
exec sql include sqlca;
宿主语言和数据库做通信使用的一个结构体
sqlca.sqlerrd[2] sql语句影响的行数
sqlca.sqlcode 最近sql执行的状态
==0 sql 语句执行正常
>0 异常发生
<0 网络 或者数据库本身的问题
sqlca.sqlerrm.sqlerrmc sql语句执行出错之后错误原因
oraca 通信区
对sqlca的补充
根据条件输出程序中sql语句
默认是关闭的 非常耗资源
a.包含oraca通信区
exec sql include oraca;
b.打开oraca通信区
exec oracle option(oraca=yes);
c.根据需求 设置sql的标志
oraca.orastxtf
0 不保存sql语句 默认
1 sql语句出现警告 就保存
2 sql语句出错 或者警告时保存
3 无论什么情况 都保存
d. 输出sql 语句
oraca.orastxt.orastxtc
select first_name into :b0 from s_emp where id=:b1
printf("%d:%s",,);
--------------------------------------------------
proc 中如何嵌入sql语句
1.select 语句要和 into 结合使用
2.dml ddl 事务控制 都可以直接使用
3.所有的语句前要加 exec sql
-----------------------------------------------
在proc 中如何调用存储过程和函数