`
akiraray
  • 浏览: 88398 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

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属性中。

     

     

     

     

     

     

     

     

     

     

     

     

  • 分享到:
    评论

    相关推荐

    Global site tag (gtag.js) - Google Analytics