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语句

?

?

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

?

名称 代码 描述
VARCHAR2 1 不定长字符串>=2000字节
NUMBER 2 浮点数
INTGER 3 ?
FLOAT 4 浮点,通常要求4或8字节
STRING 5 以NULL结尾的字符串
VARNUM 6 变长数,类似NUMBER,{wy}区别是{dy}个字节存储该值的长度
LONG 8 变长字符串,{zd0}为2G字节,类似VARCHAR2
VARCHAR 9 变长字符串,它含2字节的长度字段和小于65533字节的串字段,对于VARCHAR数组元素
ROWID 11 标识行号
DATE 12 定长日期
VARRAW 15 变长2进制数据,存储2进制数据或字符串
RAW 23 定长2进制数据,存储2进制传,{zd0}255字节
LONGRAW 23 变长2进制数据,{zd0}长度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进制数据

?

?

?

?

?

?

  • 字符串必须以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;

?

?

  • 只能使用1维数组,如果为2维的char[][],ORACLE将其认为是1维的char*[]
  • 可以声明数组,但是不能进行初始化
  • 可以使用的关键字有auto,extern,static,const.volatile
  • 不可以使用的有register
  • 在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语言的用法
    • PRO *C不支持指针数组
    • PRO *C只支持一维数组,而char[][]会被认为是一维字符串
    • 数组{zd0}维数为32767,超过此限制会有有一个异常产生
    • SQL语句中只需要写数据名与前缀运算符:,不需要写下标
    • 省去程序设计,省去大量不必要的变量命名和引用
    • 改进程序性能,可以将批操作使用数组进行
    • 当SQL语句中引用多个数组,这些数组的维数应该是相同的,否则PRO C会以最小的数组维数进行运算,并发出警告
    • 在VALUES,SET,INTO或者WHERE语句中,不允许简单的把SQL变量与数组SQL变量混用
    • 在UPDATE或DELETE语句中,不允许把数组和CURRENT OF子句一起使用

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

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

    struct{

    unsigned short len;

    unsigned char arr[20]’

    }vstring

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

    VARCHAR vstring[100];

    EXEC SQL SELECT XXX INTO :vstring FROM…

    则需要

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

    用vstring的内容长度,在其{zh1}一位标上NULL表示终结

    ?

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

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

  • 郑重声明:资讯 【Pro*C 基础教程-简化版_Vol1 类型与变量】由 发布,版权归原作者及其所在单位,其原创性以及文中陈述文字和内容未经(企业库qiyeku.com)证实,请读者仅作参考,并请自行核实相关内容。若本文有侵犯到您的版权, 请你提供相关证明及申请并与我们联系(qiyeku # qq.com)或【在线投诉】,我们审核后将会尽快处理。
    —— 相关资讯 ——