学习笔记day68-----oralce-proc,在c/c++中操作数据库的方法

本文详细介绍Proc程序的基础知识,包括Proc程序的开发步骤、宿主变量和指示变量的使用方法、数组变量的操作技巧以及如何处理SQL通信区中的错误信息。通过实际案例演示了如何在C/C++语言中嵌入SQL语句来开发高效的应用程序。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

PROC主要内容:
1、proc简介
2、proc程序的开发步骤
3、宿主变量和指示变量
4、嵌入sql语句
5、连接数据库的方式
6、错误处理
7、数据的存取更新操作
8、动态SQL

1、proc程序
    1.1、概念
        在过程化的编程语句中嵌入sql语句而开发出的应用程序,成为pro程序
        其中的编程语言,称为宿主语言
            SQL语句,成为嵌入式SQL
    1.2、proc/c++
        在C/c++语言中嵌入sql语句而开发的应用程序,称为proc/c++程序
        目的:C/C++这种高效的编程语言成为访问oracle数据库的工具
2、proc程序的基本框架
#include <...>
...
/*包含一个sqlca的结构*/
exec sql include sqlca;
定义变量、函数
int main(void){
    /*连接数据库*/
    exec sql connect:用户名/密码;
    /*操作数据库*/
    exec sql select 字段列表 into 变量列表 from 表名 where 条件;
    /*断开数据库的连接*/
    exec sql commit work release;
    //exec sql rollback work release;

    return 0;
}

3、c程序的开发步骤
    1)  编写源程序
        vi **.c
    2)  编译链接
        gcc **.c 
    3)  执行
        a.out
4、proc程序的开发步骤
    1)  编写源程序
        vi **.c
    2)  预编译  .pc--->.c
        proc xxx.pc
    3)  编译链接
        gcc **.c -lclntsh  --linux
        gcc **.c -lorasql10 --windows
    4)  执行
        a.out
first.pc
5、宿主变量
    5.1、概念
    5.2、宿主变量的类型
        char
        short
        int
        long
        float
        double
        char var[n]     定长字符串
        varchar var[n]  变长字符串
    5.3、定长字符串和变长字符串
        5.3.1、定长字符串
            数据长度不足时,用空格补齐
            案例:char
        5.3.2、变长字符串
            char name[20] --> varchar name[20]

            案例:varchar
        5.3.3、使用proc的预编译选项
            proc **.pc oname=**.cpp

            char_map = charz            处理成定长,空格补齐,'\0'结尾
                     = varchar2|charf   处理成定长,空格补齐,不以'\0'结尾
                     = string           处理成变长,
    5.4、宿主变量使用的注意事项
        1)  宿主变量在sql语句中使用时,最好在变量名前加冒号
            ...
            exec sql select first_name into :name from s_emp where id=1;
            ...
        2)  DDL语句中不允许使用宿主变量
            案例:droptable.pc
        3)  宿主变量可以使用指针,但是不建议
        4)  宿主变量的定义,强烈建议放入声明区
            exec sql begin decalre section;

            exec sql end declare section;
6、指示变量
    6.1、作用
        当数据库表中的字段值,赋值给宿主变量的时,可以使用指示变量,指示赋值状态。
        指示变量的值:
            0   正常赋值
            -1  数据库表中字段的值为null
            >0  截断赋值
    6.2、语法
        指示变量必须是short
        short indid;
        short indname;
        exec sql select id,first_name into :id indicator :indid,:name indicator :indname from s_emp where id=1;
        或
        exec sql select id,first_name into :id,:name indicator :indname from s_emp where id=1;
    6.3、把s_emp中指定id的员工id,first_name,manager_id的值查询出来,使用合适的宿主变量接受查询结果,并指示赋值状态
        案例:indvar.pc
7、数组变量
    7.1、数组变量的使用注意事项
        1)  只能是一维数组,字符可以使用二维
            int ids[50];
            char name[50][25];
        2)  不支持数组指针
        3)  数组最大元素个数32767
        4)  在select语句中使用数组变量时,直接使用数组名
        5)  可以使用指示变量数组,指示多个变量的赋值状态
    7.2、查询s_emp所有员工的id,first_name和manager_id,使用数组接受查询结果,同时使用指示变量数组只是manager_id的赋值状态
        案例:arr_var.pc
8、sqlca 通信区
    8.1、通信区的概念
        为了取得每条sql语句执行后的相关的状态说明,以便进行错误的后续处理以及跟踪
        sqlca:  SQL通信区
        oraca:  ORACLE通信区
    8.2、sqlca通信区
        sqlca是oracle和应用程序的一个接口,主要用于错误的诊断和事件处理。
        执行proc程序时,每执行一条sql语句,就把sqlca中的所有成员重新赋值。
        要想获取sql语句的执行结果的信息,需要在执行后马上获取,否则就会被下一条语句的结果覆盖。
        主要的信息包括:
            错误代码
            警告标志
            诊断文本
            处理行数    sqlca.sqlerrd[2]        影响行数
                        sqlca.sqlcode:          sql语句执行的状态
                                    0           执行正常
                                    >0          执行错误,异常
                                    <0          数据库本身
                        sqlca.sqlerrm.sqlerrmc: sql语句出错的原因
        案例:sqlca.pc
9、oraca通信区
    一个和sqlca类似的数据结构,可以作为sqlca的一个辅助存储区。
    如果需要信息的状态信息,可以从oraca中获取。
    可以获取执行的sql语句的文本

    使用oraca的步骤
    1)  包含oraca
        exec sql include oraca;
    2)  打开oraca选项
        exec oracle option(oraca=yes);
    3)  设置sql的保存标志
        oraca.orastxtf:
                    0       不保存,默认设置
                    1       出错的时候才保存
                    2       sql出现警告或错误时保存
                    3       始终保存
    4)  获取sql文本
        oraca.orastxt.orastxtc
        案例:oraca.pc
10、proc中使用sql语句
    1)  select语句
        语句前家exec sql,配合into使用
        exec sql select first_name into :name from s_emp where id=1;
    2)  dml语句(insert delete update)
        tcl语句(commit rollback)
        ddl语句(create drop alter)
        直接在语句前家exec sql
        注意:ddl语句中,不能使用宿主变量

    综合案例:实现一个迷你型学生管理系统,功能如下:
        1、创建学生信息表,包括
            学号,姓名,出生日期
        2、添加学生
        3、根据学号修改
        4、根据学好删除学生
        5、现实学生列表

练习

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值