Pro*C 基础教程-简化版_Vol1 类型与变量

一、变量声明

声明区域

EXEC SQL BEGIN DECLARE SECTION;

/*…相关语句…*/

EXEC SQL END DECLARE SECTION;

声明区域中允许的语句

SQL变量的类型声明语言:VARCHAR name[15];

EXEC SQL INCLUDE 语句

EXEC SQL VAR语句

EXEC SQL TYPE语句

 

二、数据类型

内部数据类型

类型 代码 描述 VARCHAR2 1 不定长字符串,<=2000字节 NUMBER 2 浮点数 LONG 8 2147483647字节 ROWID 11 16进制数 DATE 12 日期,时间,7个字节 RAW 23 定长2进制数据,255字节 LONGRAW 24 变长2进制数据,2147483647字节 CHAR 96 定长串,255字节 MLSLABEL 105 定长2进制标号,5个字节

 

SQL伪劣和函数

 

名称 内部数据类型 代码 描述 NEXTVAL NUMBER 2
第一次访问一个序列,在引用 sequence.CURRVAL 之前必须先引用 
sequence.NEXTVAL。第一次引用 NEXTVAL,返回序列的初始值。
后面每次引用 NEXTVAL,用已定义的 step 增加序列值并返回序列新的增加以后的值
CURRVAL NUMBER 2 返回当前的序号,第一次使用需要先使用nextval ROWNUM NUMBER 2 返回结果集序号,用于显示当前行号 LEVEL NUMBER 2 用于返回树结构中一节点的层次号 USER VARCHAR2 1 当前ORACLE用户 UID NUMBER 2 返回赋给ORACLE用户唯一的ID SYSDATE DATE 12 返回当前日期和时间

 

外表数据类型

名称 代码 描述 VARCHAR2 1 不定长字符串>=2000字节 NUMBER 2 浮点数 INTGER 3   FLOAT 4 浮点,通常要求4或8字节 STRING 5 以NULL结尾的字符串 VARNUM 6 变长数,类似NUMBER,唯一区别是第一个字节存储该值的长度 LONG 8 变长字符串,最大为2G字节,类似VARCHAR2 VARCHAR 9 变长字符串,它含2字节的长度字段和小于65533字节的串字段,对于VARCHAR数组元素 ROWID 11 标识行号 DATE 12 定长日期 VARRAW 15 变长2进制数据,存储2进制数据或字符串 RAW 23 定长2进制数据,存储2进制传,最大255字节 LONGRAW 23 变长2进制数据,最大长度2G,其他同RAW UNSIGNED 68 无符号数,2进制数,2或4字节,并需指定长度 LONGVARCHAR 94 变长字符串,由 长度和字符串组成,长度为前4位,字符串长度为2G LONGVARRAW 95 变长2进制数据,类型LONGVARCHAR CHAR 96 定长数组最长255 CHARZ 97 C中以NULL结尾的字符串,最长255字节 MLSLABEL 106 变长2进制数据

 

 

SQL变量数据类型

 

 

C语言数据类型 描述 char 单字符 char[n] 字符串 int 整数 short   long   float   double   VARCHAR[n] 变长字符串

 

三、数据类型的关联

sql变量 外部数据类型   char,char[n].char* VARCHAR2   char,char[n],char* CHAR   int,int* INTEGER   short,short* INTEGER   long,long* INTEGER   float,float* FLOAT   double,double* FLOAT   VARCHAR[n] VARCHAR  

 

四、类型等价

SQL变量等价

字符串必须以NULL中介,可以显示的声明变量等价保证,select活fetch出的字符串以NULL终结 使ORACLE只保存不解释数据,比如float类型以longraw形式在数据库

自定义类型等价

方法1

struct diagram{

short len;

char buff[4000];

};'

typedef struct digram graphics;

EXEC SQL BEGIN DECLARE SECTION;

EXEC SQL TYPE  graphics is VARRAW(4000);

EXEC SQL END DECLARE SECTION;

 

方法二

如果变量为指针类型,而需要声明其指向的数据进行变量等价操作,可以使用REFERENCE

typedef unsigned char * my_raw;

EXEC SQL TYPE my_raw IS VARRAW(4000) REFERENCE;

 

五、SQL变量的声明和引用

SQL变量的声明

 

只能使用1维数组,如果为2维的char[][],ORACLE将其认为是1维的char*[] 可以声明数组,但是不能进行初始化 可以使用的关键字有auto,extern,static,const.volatile 不可以使用的有register

SQL变量引用

在SQL语句中变量前加上:运算符 在C语言语句中,直接使用

六、指示器变量的声明和引用

指示器变量的作用

向数据库列插入NULL值 检查数据库列中选出的数据是否为NULL,是否有截断 对于输入宿主变量,有以下含义 -1:把NULL值存入数据库的表列中,而忽略宿主变量的值 >=0:把指示器变量输入宿主变量并存入数据库中 对于输出宿主变量,有以下含义 -1:数据库列的值是NULL,此时宿主变量的值为不确定状态 0:将原值赋予宿主变量 >0:将原值赋予宿主变量后,将该列中的原始长度赋予指示器变量,并充值sqlcode为0;

指示器变量的声明

位于宿主变量的前或后声明

short ind_deptno;

int dept_number;

 

指示器变量的引用

在SQL语句中变量前加上:运算符 在C语言语句中,直接使用

EXEC SQL SELECT DEPT_NO INTO :dept_number :int_deptno FROM….

或加上关键字 INDICATOR

EXEC SQL SELECT DEPT_NO INTO :dept_number INDICATOR :int_deptno FROM….

七、指针变量的声明和引用

指针变量的声明

同基本类型变量声明,在DECLARE BLOCK中声明即可

指针变量的引用

在SQL语句中使用:而不是* C语言中同C语言的用法

八、数组变量的声明和引用

数组sql变量的声明

PRO *C不支持指针数组 PRO *C只支持一维数组,而char[][]会被认为是一维字符串 数组最大维数为32767,超过此限制会有有一个异常产生

数组sql变量的引用

SQL语句中只需要写数据名与前缀运算符:,不需要写下标

PRO C使用数组的优缺点

省去程序设计,省去大量不必要的变量命名和引用 改进程序性能,可以将批操作使用数组进行 当SQL语句中引用多个数组,这些数组的维数应该是相同的,否则PRO C会以最小的数组维数进行运算,并发出警告 在VALUES,SET,INTO或者WHERE语句中,不允许简单的把SQL变量与数组SQL变量混用 在UPDATE或DELETE语句中,不允许把数组和CURRENT OF子句一起使用

九、VARCHAR变量的声明和引用

VARCHAR变量的声明

在声明为VARCHAR vstring[20];的时候(必须指出大小,范围1~65533)

预编译截断会被翻译成C语言的一个结构变量

struct{

unsigned short len;

unsigned char arr[20]’

}vstring

VARCHAR变量的引用

SQL语句中需要使用:作为前准 C语言中与结构体用法一致

VARCHAR vstring[100];

EXEC SQL SELECT XXX INTO :vstring FROM…

则需要

vstring.arr[vstring.len]=’\0’;

用vstring的内容长度,在其最后一位标上NULL表示终结

 

而如果作为输入,则需要预先将长度计算后赋予len属性中。

 

 

 

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值