一 BASIC介绍

1 一般的BASIC程序是如下一个格式
[ label ] statement [ ; statement … ] <Return>
2 关于subroutine
a 如果嵌入到了程序中用GOSUB调用,如果在外部,使用CALL
b 使用return返回到主程序,如果在return之前subroutine结束了,自动return
c 如果subroutine中有ABORT STOP CHAIN则永远回不到主程序。
3 注释
以REM * ! $* 开头的为注释
4 创建一个BASIC 程序的步骤
使用CREATE.FILE命令创建一个type 1或type 19 DataStage file来保存BASIC程序的源码。(在DSEngine目录下运行CREATE.FILE命令,它将提示你输入文件名等参数)

使用DataStage Editor或其他编辑器创建BASIC程序源码,这个源码成为你刚才创建的文件的一条记录。

使用BASIC命令来编译你程序,这将创建一个包含目标代码的文件。目标文件的名字不重要,因为总是通过源文件名来引用程序。

可以用RUN命令来执行你的程序,使用RAID命令来调试你的程序。


                                                                二、基础知识
数据类型、变量和操作符
所有数据在内部都是以字符串存储,在运行时转换为具体类型。
主要有三种数据类型:字符串、数字型、和unknown(null)

字符串
在BASIC源码中,字符串产量是ASCII字符的序列,所以不能有0(null)和10(linefeed)字符,而是要使用CHAR(0)和CHAR(10)
数字型
范围从10(-307)到10(307),最多15位小数
unknown
null在内部是由单一字节CHAR(128)代表的,是一个string,可以用系统变量@NULL.STR来引用它。在BASIC程序中可以使用系统变量@NULL来引用null值。
一个字符串与null连接结果为null

数组
dimensioned array
在向量(一维数组)中,第一个元素的index为1
向量可以看做第二位为1的二维数组(矩阵)。
矩阵和向量的第一个元素分别用vector.name(0)和matrix.name(0,0)表示。它可以在MATPARSE、MATREAD和MATWRITE语句中用来存储不合格的字段。

动态数组
动态数组的最高层是字段,由(F)分割。字段包含有(V)分割的值组成。每个值又可以包含由(S)分割的subvalue。

字符串的比较
字符串的比较是一个个的比较每个字符的ASCII的值。如果两个字符串可以转换为数字,总是比较两个数字的数值大小。任何值与null相比较的结果都是unknown。空串不是简单的等于0。空格看做小于0。

字符串匹配
X代表任何字符 A代表所有字母 N代表所有数字 前面的数字代表重复次数。如果前面的数字为0,代表后面的字符重复0到N次的任意次数都可以。

0是false 空串是false null非true非false


锁 事务和隔离级别

锁有两种粒度:细粒度(记录锁定)和粗粒度(文件锁定)
DataStage支持以下几种锁:
记录共享锁
记录更新锁
文件共享锁
文件意向(intent)锁 介于共享与排他之间
文件排他锁

事务
事务可以嵌套
子事务在父事务提交或回滚之前开始的话,子事务将变成活动事务,而父事务将继续存在但是是非活动的。当子事务提交或回滚之后,父事务将再次变为活动的。
在最高层的事务提交之前,将缓存所有子事务的数据库操作。当进行一个读取操作时,首先会去读取缓存的数据,如果找不到才会从数据库文件中读取。