symfoware是日本富士通自行研发的一款RDB产品,symfoware名字来源于
【Symphonied】的【Sym】
【Information】的【fo】
【Warehouse】的【ware】
直译过来就是一个”和谐的信息仓库“
同oracle与mysql一样,利用symfoware RDB同样可以“创建/管理/查询”DB。
可是由于DB底层的构造差异,导致学习symfoware的门槛高,许多概念晦涩难懂。
Symfoware RDB与其它关系数据库,最大的不同是创建一个Table时,需要同时创建DSO和DSI。
DSO(Data Structure Organization)用来定义表和索引的存储数据类型。
SEQUENTIAL 表中数据结构
RANDOM
OBJECT 表中数据结构
BTREE 索引结构
DSI(Data Structure Instance)用来指定表和索引的数据存储位置(dbspace)。
Symfoware RDB系统可以创建多个DB,DB中可以创建多个schema,每个schema管理一套数据对象
(表,INDEX,VIEW等)。每个数据对象都是由”逻辑构造“,”存储构造“,”物理构造“组成,这些脚本信息存放在
RDB字典中;数据对象的物理存放地点为dbspace,dbspace就是指具体的磁盘,文件等。
逻辑构造(Table,Index)
存储构造(表和索引的DSO和DSI)
物理构造(DBSPACE)
举个例子如下:
-- データベース定義 データベース名は“RDBDB” CREATE DATABASE RDBDB; -- データベーススペース定義 データベーススペース名は“DBSPACE1” CREATE DBSPACE DBSPACE1 ALLOCATE RAWDEVICE /dev/rdsk/c0t1d0s1; -- スキーマを定義 スキーマ名は“STOCKS” CREATE SCHEMA STOCKS -- 在庫製品の管理表を定義 CREATE TABLE 在庫表 ( 製品番号 SMALLINT NOT NULL, 製品名 NATIONAL CHARACTER(10) NOT NULL, 在庫数量 INTEGER, 倉庫番号 SMALLINT, PRIMARY KEY (製品番号) ) ; -- 在庫表の格納構造定義 CREATE DSO 在庫表DSO -- 在庫表のDSO FROM STOCKS.在庫表 TYPE SEQUENTIAL(PAGESIZE(4),ORDER(1)); CREATE DSI 在庫表DSI -- 在庫表のDSI DSO 在庫表DSO ALLOCATE DATA ON DBSPACE1 SIZE 280K; -- 在庫表の製品番号にインデックスを作成 CREATE DSO 製品番号IXDSO -- インデックスのDSO INDEX ON STOCKS.在庫表 (製品番号) TYPE BTREE ( PAGESIZE1(16),PAGESIZE2(1), REALIGNMENT) BY ADDRESS; CREATE DSI 製品番号IXDSI -- インデックスのDSI INDEX DSO 製品番号IXDSO ALLOCATE BASE ON DBSPACE1 SIZE 200K, INDEX ON DBSPACE1 SIZE 40K;
symfoware常用函数
REPLICATE
用于重复输出某个字符
REPLICATE(' ‘,11) --重复输出11个半角空格
CNV_CHAR
把日期转换为字符类型
CNV_CHAR(CURRENT_DATE, 'YYYYMMDD’) --将当前日期按照YYYYMMDD的格式输出
LPAD
项目位数不足时,从左边开始补指定字符,如果处理字符串为空,则返回NULL
如果处理的字符串为日本语,需要按字节数进行处理(日语字符数*3)
LPAD(CUSTOMER_CD, 6, '0‘) --CUSTOMER_CD不足6位时,从左边开始补0
RPAD
项目位数不足时,从右边开始补指定字符,如果处理字符串为空,则返回NULL
如果处理的字符串为日本语,需要按字节数进行处理(日语字符数*3)
RPAD(CUSTOMER_NM, 10, ' ') --CUSTOMER_NM不足10位时,从右边开始补半角空格
SUBSTRING
按位截取字符串,如果处理的字符串为空,返回空
SUBSTRING(CUSTOMER_NM FROM 3 FOR 6) -- 从第3位开始往后截取6位
CAST
进行数据类型转换,支持symfoware中所有的数据类型
CAST(数值项目 AS VARHAR(6)) --把数值项目转换为6位的可变字符串
TRIM
从前往后,或者从后往前,去除掉指定的字符
TRIM(LEADING '0' FROM 处理字符串) --去除掉字符串中前面的0
ADD_DATE
对日期类型按照年月日进行加减法运算
ADD_DATE(CURRENT_DATE, -1, 'MONTH') --取得上个月的日期
symfoware中的虚表: RDBII_SYSTEM.RDBII_ASSISTTABLE
参考资料
http://software.fujitsu.com/jp/manual/manualfiles/M100005/J2X17484/01Z200/index.html