前言
本系列第二集,主要用于介绍ORACLE通讯区。最后一部分则会体积INCLUDE语句
希望这次的学习计划可以坚持下去,相关笔记的整理也会继续下去。
一、通讯区简介
为了取得每个SQL语句执行后的相关状态说明,以便进行错误的后续操作已经跟踪。ORACLE提供两个通讯区:
- SQL通讯区-SQLCA
- ORACLE通讯区-ORACA
二、SQLCA
什么是SQLCA
SQLCA是ORACLE和应用程序的一个接口,主要用于错误诊断和时间处理
执行PRR*C程序时,ORACLE把每一个嵌入SQL状态信息存入SQLCA中,主要有错误代码、警告标致设置、诊断文本和处理行数等。
SQLCA的组成
struct sqlca{
char sqlcaid[8];
long sqlabc;
long sqlcode;
struct{
unsigned short sqlerrml;
char sqlerrmc[70];
}sqlerrm;
char sqlerrp[8];
long sqlerrd[6];
char sqlwarn[8];
char sqlext[8]
};
名称 |
作用 |
sqlid |
用于标识一个SQLCA |
sqlabc |
保留sqlca的长度(字节为单位) |
sqlcode |
保留sql语句处理的代码: 0:正常执行 >0:执行语句发生一个异常
<0:未执行语句便发生异常 |
sqlerrm |
一个子结构 |
sqlerrm.sqlerrml |
sqlerrmc的长度 |
sqlerrm.sqlerrmc |
错误代码中的错误信息。如果错误信息超过70个字符,如果需要取得完整的错误信息必须使用SQLGLM
()函数 |
sqlerrp |
保留字,暂时无作用 |
sqlerrd |
一个数组,元素作用如下: 0:保留 1:保留
2:保存当前SQL语句处理的行数,如果SQL执行失败无值定义;如果处理中发生异常,则记录成功的条数;在一个OPEN动作后,值将被归零,在FETCH动作后增加
3:保留 4:保存相对位移,指出SQL语句中哪一个字符开始出现(语法)分析错误,下标从0开始 5:保留 |
sqlwarn |
8个元素用于标识相应的警告标识,被置为W表示发生相应的警告 0:如果有警告标识位,该为就会被标识
1:如果把一个截断的列值赋给宿主变量,则会标识该标识。仅对字符数据菜生效。 2:失效
3:如果查询选择表中的列数不等于SELECT或者FETCH语句的into自子句中的数组个数,则会标识该标识位
4:如果表中的每一个行都没有被WHERE子句(全查)的DELETE和UPDATE处理,则会标识该标识 5:当EXEC SQL
CREATE语句由于PL/SQL编译错误而失败时,该标志被设置 6:失效 7:失效 |
sqlext |
保留 |
SQLCA的声明
- 使用EXEC SQL INCLUDE sqlca;
- 直接使用结构体声明,编写入程序中
- 当PRO*C程序是几个源文件共用,可以使用extern存储:#define SQLCA_STORAGE_CLASS exterm
三、ORACA
什么是ORACA
一个类似SQLCA的数据结构,可以当作为SQLCA的一个辅助通讯区。当需要更加详细的状态信息,则可以使用ORACA,ORACA的使用是可选的。
ORACA的组成
struct oraca{
char oracaid[8];
long oracabc;
long oracchf;
long oradbgf;
long orahchf;
long orastxtf;
struct{
unsigned short orastxtl;
char orastxtc[70];
}orastxt;
struct{
unsigned short orasfnml;
char orasfnmc[70];
}orasfnm;
long oraslnr;
long orahoc;
long oramoc;
long oracoc;
long oranor;
long oranpr;
long oranex;
}
名称 |
作用 |
oracaid |
标识一个ORACA |
oracabc |
用于比保存ORACA数据结构的长度(字节为单位) |
oracchf |
如果主DEBUG标致被设置,则该标识会在每个光标操作前,搜集缓冲存储器的统计,并检查光标缓冲存储器的一致性,并将相关错误返回给SQLCA。 相关设置: 0:禁止进行一致性检查(默认) 1:进行一致性检查 |
oradbgf |
DEBUG主比标致位 0:禁用(默认) 1:启用 |
orahchf |
如果主DEBGU标识被设置,则每当预编译程序动态分配或释放内存单元时,它通知ORACLE运行库检查堆的一致性。该标识必须在CONNECT命令发出前被设置,一旦被设置就不能被清楚。用于发现破坏内存的程序的错误。 0:禁用(默认) 1:启用 |
orastxtf |
标识当前SQL语句的文本是否被保存,以及如何保存 0:不保存SQL语句(默认) 1:仅对SQLEEROR保存SQL语句文本 2:仅对SQLERROR或SQLWARNING保存文本 3:总是保存SQL语句文本 |
orastxt |
子结构用于保存ORACLE最近分析的SQL语句文本 |
orastxt.orastxtl |
保存当前SQL语句文本的长度 |
orastxt.orastxtc |
保存当前SQL语句的文本。至多保存文本的开始70个字符,由预编译程序所分析的语句不被保存在ORACA中 |
orasfnm |
子结构,用于标识包含当前SQL语句的源文件名。用于多源文件定位出错SQL所在源文件使用 |
orasfnm.orasfnml |
标识orasfnmc的长度 |
orasfnm.orasfnmc |
保存源文件名,至多70个字符 |
oraslnr |
标识当前SQ连语句所在行的行号 |
orahoc |
记录程序运行期间MAXOPENCURSORS被设置的最高值 |
oramoc |
记录程序所需要打开的ORACLE光标最大数。如果MAXOPENCURSORS设置的太低,该最大数可能比orahoc大,则强制预编译程序扩大光标缓冲存储器大小 |
oracoc |
记录当前打开的光标数 |
oranor |
该字段记录程序所需要的光标缓冲存储器的再赋值次数。表示光标缓冲存储器中的“重复做”的程度,应使它尽可能低 |
oranpr |
记录程序所需要的SQL语句分析次数 |
oranex |
记录程序锁需要的SQL执行次数,应该尽可能的比oranspr高 |
ORACA的声明
- 使用INCLUDE: EXEC SQL INCLUDE ORACA;
- 将结构体声明直接写入程序中
- 为了可以使用ORACA,需要在预编译选项中打开其选项:
- 在命令行上指定ORACA=YES
- 在程序行上编写如下语句:EXEC ORACLE OPTION(ORACA = YES)
三、SQLCODE声明
在EXEC SQL DELCARE SECTION之外直接声明
long SQLCODE;一定要大写
四、INCLUDE语句
- 可以用于声明通讯区;
- INCLUDE的相当于将一个文件拷贝到程序内,类似C语言的#include
- 格式为EXEC SQL INLUCE filename;
- 如果文件扩展名未指定,则默认为.h文件
- 对大小写敏感
- 主要用户INCLUDE其他相关的.pc文件,因为需要进行预编译
分享到:
相关推荐
### ProC基础教程—简化版Vol2:通讯区详解 #### 一、通讯区简介 在Oracle数据库的应用程序开发过程中,通讯区起到了桥梁的作用,它能够帮助开发者获取SQL语句执行后的状态信息,从而便于进行错误处理和追踪。...
### ProC基础教程简化版Vol4:登录详解 #### 前言 本文档旨在详细介绍如何使用Pro*C/C++(简称ProC)与Oracle数据库进行交互,并特别关注于登录过程。无论是在开发还是维护阶段,登录操作都是必不可少的一步,它...
### ProC基础教程—简化版 Vol5:基本增删改 #### 数据插入 **概述** 在Pro*C/C++(简称ProC)中进行数据插入,主要是通过嵌入式的`INSERT`语句来实现的。ProC是一种将SQL语句嵌入到C语言中的编程方式,它允许...
压缩包内的“64-ia-32-architectures-software-developer-vol-2b-manual.pdf”是手册的电子版,通常这样的手册会涵盖处理器的内部工作原理、编程模型、系统编程接口(如系统调用)、内存管理、浮点运算、调试工具...
### 解决C语言中生成的EXE文件执行后窗口消失的方法 #### 背景介绍 在使用C语言编程时,经常会遇到一个令人头疼的问题——编译生成的EXE文件在执行完毕后,命令行窗口立即关闭。对于调试或者查看执行结果来说,这...
2. **AT** - 安排在特定时间运行命令,类似于任务计划器,可以指定远程计算机上的命令。 3. **ATTRIB** - 显示或更改文件属性,如只读、隐藏、存档和系统属性。 4. **BREAK** - 控制Ctrl+C中断信号的行为,常用于...
SSTL-2版本使用2.5V电源电压,而SSTL-3版本使用3.3V电源电压,SSTL-18版本则使用1.8V电源电压。这些标准针对不同的内存类型和电压需求进行了优化。 #### LVDS (Low-Voltage Differential Signaling) LVDS是一种...
DOS(Disk Operating System)是早期个人计算机上广泛使用的操作系统之一,它提供了命令行界面...虽然现代操作系统已经很少直接使用 DOS,但了解这些基础命令对于理解操作系统的工作原理和学习计算机科学依然有其价值。
- **Q302-2SC2482**: 功率放大器晶体管。 - **Q303-TIP122**: 大功率晶体管,常用于开关电源。 - **Q304-2SA1015**: 小信号晶体管。 7. **其他重要元件** - **L301-15uH**: 电感,用于信号滤波。 - **R301-8.2...
- **1-2:** 正常模式(Normal),在此模式下,系统会正常读取并应用CMOS设置。 - **2-3:** 清除CMOS(ClearCMOS),当跳线置于2-3位置时,主板的CMOS设置会被重置为出厂默认值,这对于忘记密码或需要恢复默认设置...
IF EXIST C:\test.txt (ECHO File exists) ELSE (ECHO File does not exist) ``` 37. **LABEL** - **用途**:创建、更改或删除磁盘卷标。 - **示例**: ```cmd LABEL C: MyDrive ``` 38. **MD/MKDIR** - *...
- **使用示例**:`vol c:` 67. **xcopy** - **命令简介**:复制文件和目录树。 - **使用示例**:`xcopy c:\temp\*.* d:\backup /e` 68. **其他命令** - **appwiz.cpl**:控制面板中的程序和功能。 - **calc**...
### CMD命令大全(最新版) #### 一、概述 在计算机操作中,命令行界面(Command Line Interface, CLI)是用户与计算机系统交互的一种方式。在Windows操作系统中,CMD(Command Prompt)是执行命令行指令的主要工具...
本文档包含Intel 64和IA-32架构软件开发者手册的全部四卷。基本架构,卷号 253665;指令集参考 A-Z,卷号 325383;系统编程指南,卷号号 325384;特定型号寄存器,卷号号 335592。在评估您的设计需求时,请参考所有...
- `CACLS filename [/T] [/C] [/Q]` 显示或设置文件权限。 7. **CALL** - 执行批处理文件内的命令。 - `CALL script.bat` 调用并执行批处理文件。 8. **CD/CHDIR** - 改变当前目录。 - `CD path` 或 `CHDIR ...
2. **-ab** - **功能**:设置音频比特率(单位:kb/s)。 - **示例**:`-ab 56`设置音频比特率为56kb/s。 3. **-ar** - **功能**:设置音频采样率(单位:Hz)。 - **示例**:`-ar 22050`设置音频采样率为...
Intel® 64 and IA-32 Architectures Software Developer’s Manual Combined Volumes: 1, 2A, 2B, 2C, 2D, 3A, 3B, 3C, 3D and 4
2. **COPY/CAT** - 复制文件。`COPY source destination`,`CAT` 用于查看文件内容。 3. **DEL/RMDIR** - 删除文件或删除目录。`DEL file`,`RMDIR directory` 或 `RD directory`。 4. **MOVE** - 移动文件或目录...