一 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??崭窨醋鲂∮?。
字符串匹配
X代表任何字符 A代表所有字母 N代表所有數字 前面的數字代表重復次數。如果前面的數字為0,代表后面的字符重復0到N次的任意次數都可以。
0是false 空串是false null非true非false
鎖 事務和隔離級別
鎖
鎖有兩種粒度:細粒度(記錄鎖定)和粗粒度(文件鎖定)
DataStage支持以下幾種鎖:
記錄共享鎖
記錄更新鎖
文件共享鎖
文件意向(intent)鎖 介于共享與排他之間
文件排他鎖
事務
事務可以嵌套
子事務在父事務提交或回滾之前開始的話,子事務將變成活動事務,而父事務將繼續存在但是是非活動的。當子事務提交或回滾之后,父事務將再次變為活動的。
在最高層的事務提交之前,將緩存所有子事務的數據庫操作。當進行一個讀取操作時,首先會去讀取緩存的數據,如果找不到才會從數據庫文件中讀取。