在SQL数据库中有多种变量,下面就将为您介绍SQL中的指示变量及数组变量,供您参考,希望对您学习SQL中的变量能够有所帮助。
1.指示变量
实际上也是一类SQL变量,它被用来管理与其相关联的宿主变量(即在SQL语句中充当输入或输出的变量)。每一个宿主变量都可定义一个指示器变量,主要用于处理空值(NULL)
指示器变量的说明基本同一般SQL变量一样, 但必须定义成2字节的整型,如SHORT、INT。在SQL语句中引用时,其前也应加“:”(冒号),而且必须附在其相关联的宿主变量之后,在C语句中,可独立使用。当指示器变量为-1时,表示空值。例如:
EXEC SQL BEGIN DECLARE SECTION ;
INT dept_number;
SHORT ind_num;
CHAR emp_name;
EXEC SQL END DECLARE SECTION ;
Scanf(“90d %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列插入空值。#p#
2.数组SQL变量
在SQL语句中引用数组时,只需写数组名(名字前加冒号),不需写下标,在C语句中用法如同C语言的数组变量。使用数组可大大降低网络传输开销。如要向一表插入100行数据,如果没有数组,就要重复100次, 而引用后,只须执行一次insert语句、便可一次性插入。例如:
EXEC SQL BEGIN DECLARE SECTION;
Int emp_number[100];
Char emp_name[100][15];
Float salary[100],commission[100];
Int dept_number;
EXEC SQL END DECLARE SECTION;
….
EXEC SQL SELECT EMPNO,ENAME,SAL,COMM
INTO :emp_number,:emp_name,:salary,:commission
FROM EMP
WHERE DEPTNO=:dept_number;
在使用数组时,应注意以下几点;
1)不支持指针数组
2)只支持一维数组, 而 emp-name [100][15]视为一维字符串#p#
3)数组***维数为32767,超出会报“paramter out of range”错 误
4) 在一条SQL语句中引用多个数组时,这些数组维数应相同
5)在VALUES , SET, INTO 或WHERE子名中, 不允许把简单SQL变量与数组SQL变量混用
6)不能在DELARE部分初始化数组
例如:下面的引用是非法的
EXEC SQL BEGIN DECLARE SECTION;
Int dept_num [3] = {10,20,30};
EXEC SQL END DECLARE SECTION ;
EXEC SQL SELECT EMPNO, ENAME , SAL
INTO : emp_num [ i ], : emp_name [ i ], : salarg [ i ]
FROM EMP
7)在UPDATE或DELETE语句中,不允许把数组与CURRENT OF字句一起使用
【编辑推荐】