PROC基础知识之指示变量变量
来源:互联网 发布:qq飞车曙光伯爵数据 编辑:程序博客网 时间:2024/05/29 14:33
• 指示器变量是与宿主变量相关联的一类SQL变量,它被用来监督和管理与其相关联的宿主变量,每一个宿主变量都可以定义一个指示器变量。指示器变量的具体作用如下:
(1) 向数据库表列输入NULL值
(2) 检查从数据库表列中选取的数据是否是NULL值,或是否发生截断问题
• 指示变量必须被定义为2 个字节的整数类型(short)
• 在SQL 语句中,如果没有指定INDICATOR 关键字,指示变量必须紧跟在与其关联的宿主变量后
• 如果使用DECLARE SECTION 声明宿主变量,则相关指示变量也必须用DECLARE SECTION 进行声明
• 在SQL 语句中指示变量前也需要加入“:”指示符
:host_variable INDICATOR :indicator_variable
等效于
:host_variable:indicator_variable
• 指示变量的值,及其代表的含义如下:
Ø 0 操作成功
Ø -1 该指示变量对应的宿主变量返回了或插入、更新成了NULL 值
Ø -2 从数据库存放数据到对应的宿主变量时,数据超长,并且不能推断出截断了多少字节的长度
Ø >0 在FETHC 或SELECT 语句时,因数据超长而被截断存放在了对应的宿主变量中,指示变量存放对应列的长度
• 如果不用指示变量在SELECT或FETCH语句中将一个NULL值赋给宿主变量时,Oracle会报1405错误。为了避免这种情况,可以采用两种解决方法:
Ø 使用指示变量
Ø 调整Pro*C/C++预编译程序proc 的命令行参数,设定MODE=ORACLE,UNSAFE_NULL=YES
指示器变量的引用:
在SQL语句中,指示器变量名字前应加冒号,而且必须在其相关联的宿主变量之后。在C语言中,指示器变量如同C变量一样独立使用,不须前缀冒号,也不须跟在相关宿主变量之后。例如:
EXEC SQL SELECT EMPN()
INTO::emp_number:ind_num
FROM EMP
WHERE ENAME = :emp_name;
If (ind_num = -1)
{
Printf(“employlee number is NULL!”);
}
为了增进可读性,可以再宿主变量及其指示器变量之间加INDICATOR关键词。如:
EXEC SQL SELECT EMPNO
INTO:emp_number INDICATOR:ind_num
FROM EMP
WHERE ENAME = :emp_name;
指示器变量的应用举例:
例1:向数据库表列中插入NULL值
Printf(“enter department number and name”);
Scanf(“%d%s”, &dept_number, dept_name);
If (dept_number = 0)
{
Ind_num = -1;
}
else
{
Ind_num = 0;
}
EXEC SQL INSERT INTO DEPT(DEPTNO,DNAME)VALUES(:dept_number:ind_num, :dept_name)
其中ind_num是dept_number的指示器变量,当输入的dept_number的值是0的时候,则向DEPT表的DEPTNO列插入NULL值
例2:检查从数据库表列中检索的值是否为NULL
EXEC SQL BEGIN DECLARE SECTION;
int emp_number;
float salary, commission;
short ind_comm; /* 指示变量 */
EXEC SQL END DECLARE SECTION;
EXEC SQL SELECT SAL, COMM
INTO :salary, :commission:ind_comm
FROM EMP
WHERE EMPNO = :emp_number;
if( -1 == ind_comm ) /* commission变量是NULL */
pay = salary;
else
pay = salary + commission;
- PROC基础知识之指示变量变量
- PROC基础知识之指示变量变量
- PROC基础知识之指示变量变量
- PROC基础知识之SQL变量
- PROC基础知识之VARCHAR变量
- PROC基础知识之CURSOR变量
- PROC基础知识之结构型宿主变量
- proc*c 程序设计(二) 指示变量
- Proc *C/C++入门之指示器变量
- pro*c宿主变量和指示变量
- 基础知识之绑定变量窥视----BIND PEEKING
- java基础知识之常量与变量
- Java基础知识之变量和运算符号
- python基础知识之变量、语句、函数、模块
- Python之基础知识(1. 变量输入输出)
- 经验教训:指示变量,一个也不能少!
- 随机指示变量(Indicator Random Variables)
- 随机指示变量(Indicator Random Variables)
- android studio中导入百度自动更新SDK
- Android架构设计演变史
- Android SDK在线更新镜像服务器
- 访问量到1万之后再写
- errors
- PROC基础知识之指示变量变量
- python 列表(Lists)
- StrictMode VMPolicy demo介绍
- The run destination "设备名称" is not valid for Running the scheme '项目名称'.
- 如何实现android手机摄像头的的自动对焦
- java.lang.NoClassDefFoundError
- 浅谈随机数发生器
- python 元组(tuple)
- 使用Weka进行数据挖掘