79、 执行批处理SQL
---定制分隔符#
DB2 -TD# -F D:\\WII文档\\省局数据复制的建立\\4_CAPNICKNAME18ZHOUKOU.SQL -L C:\\WIILOG\\4_CAPNICKNAME18ZHOUKOU.LOG
---默认分隔符为;
DB2 -TVF D:\\WII文档\\省局数据复制的建立\\6_SETSHANGQIU.SQL -L C:\\WIILOG\\6_SETSHANGQIU.LOG
---DOS下执行,默认分隔符为;
---(-C:执行DB2命令窗口,然后停止;-W:一直等到DB2命令窗口终止; -I:从进行调用的SHELL继承环境;-T:从进行调用的SHELL继承标题) DB2CMD -C -W -I -T DB2 -TVF D:\\WII文档\\省局数据复制的建立\\6_SETSHANGQIU.SQL -L C:\\WIILOG\\6_SETSHANGQIU.LOG
80、 DB2端口号
C:\\WINDOWS\\SYSTEM32\\DRIVERS\\ETC\\SERVICES文件
下面几个是在安装是选择了PARTITION才有的,一共有两个实例 实例一:DB2C_DB2 DB2_DB2 60000/TCP DB2_DB2_1 60001/TCP DB2_DB2_2 60002/TCP DB2_DB2_END 60003/TCP 实例二:DB2C_DB2CTLSV DB2_DB2CTLSV 60004/TCP DB2_DB2CTLSV_1 60005/TCP DB2_DB2CTLSV_2 60006/TCP DB2_DB2CTLSV_END 60007/TCP
下面才是真正用于应用程序和编目数据库的端口号 DB2C_DB2 50000/TCP DB2C_DB2CTLSV 50001/TCP
四、 目录视图说明
说明 目录视图 检查约束 列 检查约束引用的列 关键字中使用的列 数据类型 函数参数或函数结果 参考约束 模式 表约束 表 触发器 用户定义函数 视图
SYSCAT.CHECKS SYSCAT.COLUMNS SYSCAT.COLCHECKS SYSCAT.KEYCOLUSE SYSCAT.DATATYPES SYSCAT.FUNCPARMS SYSCAT.REFERENCES SYSCAT.SCHEMATA SYSCAT.TABCONST SYSCAT.TABLES SYSCAT.TRIGGERS SYSCAT.FUNCTIONS SYSCAT.VIEWS 五、 数据类型
数据类型 类型 特性 示例或范围 定长字最大长度为 254 'Sunny day ' 符串 变长字VARCHAR(15) 最大长度为 4000 'Sunny day' 符 长度为 2 字节精SMALLINT 数字 范围为-32768 至 32767 度为 5 位 长度为 4 字节精范围为INTEGER 数字 度为 10 位 -2147483648 至 2147483647 范围为-3.402E+38至-1.175E-37单精度浮点32 位REAL 数字 或 1.175E-37 至-3.402E+38或近似值 零 范围为-1.79769E+308 至双精度浮点64 位-2.225E-307DOUBLE 数字 近似值 或 2.225E-307 至 1.79769E+308或零 精度为 5小数位DECIMAL(5,2) 数字 范围为 -10**31+1 至 10**31-1 为 2 日期时 三部分DATE 间 值 1991-10-27 日期时 三部分TIME 间 值 13.30.05 CHAR(15) TIMESTAMP BLOB CLOB 日期时间 七部分值 1991-10-27-13.30.05.000000 存储长度可变的二二进制进制数据,长度最大对象大为 2 GB。超过 1 字符串 GB 的长度不进行日志记录 存储长度可变的字字符大符数据,长度最大对象字为 2 GB。超过 1 GB 符串 的长度不进行日志记录。
六、 函数
1、 列函数
列函数对列中的一组值进行运算以得到单个结果值。下列就是一些列函数的示例。
AVG
返回某一组中的值除以该组中值的个数的和 COUNT
返回一组行或值中行或值的个数 MAX
返回一组值中的最大值 MIN
返回一组值中的最小值
2、 标量函数
标量函数对值进行某个运算以返回另一个值。下列就是一些由DB2 通用数据库提供的标量函数的示例。
ABS
返回数的绝对值 HEX
返回值的十六进制表示 LENGTH
返回自变量中的字节数(对于图形字符串则返回双字节字符数。) YEAR
抽取日期时间值的年份部分
七、 编程技巧
1、 DB2编程 1.1 变量赋值
对变量的赋值不能用select ..into ..方式而要用set v=(select ..)的方
式,代码示例如下。
CREATE FUNCTION SXFM.ISORDERSUBMITDATE(IN_ROW_ID DECIMAL(16,0)) RETURNS DATE LANGUAGE SQL BEGIN ATOMIC
DECLARE V_SUBMIT_DATE DATE;
DECLARE V_SELL_ID DECIMAL(16, 0); DECLARE V_BUY_ID DECIMAL(16, 0);
set V_SELL_ID = (SELECT COALESCE(RECEIVE_ID,-1) FROM IS_ORDER WHERE ROW_ID=IN_ROW_ID);
set V_BUY_ID = (SELECT COALESCE(PAY_ID,-1) FROM IS_ORDER WHERE ROW_ID=IN_ROW_ID); set V_SUBMIT_DATE = (SELECT DATE(MAX(A.SUBMIT_DATE)) FROM AM_AUDIT_QUEUE
A,SM_USER B,SM_USER C
WHERE A.TABLE_CODE='IS_ORDER' AND A.TABLE_ROW_ID=IN_ROW_ID
AND A.AUDIT_EMP_ID=C.ROW_ID AND C.BRANCH_ID=V_BUY_ID --审核方为付款方 AND A.SUBMIT_EMP_ID=B.ROW_ID AND B.BRANCH_ID=V_SELL_ID); --提交方为收款方
RETURN V_SUBMIT_DATE; END;
1.2 建存储过程时Create 后一定不要用TAB键
CREATE PROCEDURE 的CREATE后只能用空格,而不可用TAB健,否则编译会通不过。
1.3 使用临时表
要注意,临时表只能建在USER TEMPORY TABLES SPACE 上,如果DATABASE
只有SYSTEM TEMPORY TABLE SPACE是不能建临时表的。 另外,DB2的临时表和SYBASE及ORACLE的临时表不太一样,DB2的临时表是在一个SESSION内有效的。所以,如果程序有多线程,最好不要用临时表,很难控制。建临时表时最好加上 WITH REPLACE选项,这样就可以不显示的DROP 临时表,建临时表时如果不加该选项而该临时表在该SESSION内已创建且没有DROP,这时会发生错误。
1.4 从数据表中取指定前几条记录
SELECT * FROM TB_MARKET_CODE FETCH FIRST 1 ROWS ONLY 但下面这种方式不允许
SELECT MARKET_CODE INTO V_MARKET_CODE FROM TB_MARKET_CODE FETCH FIRST 1 ROWS ONLY;
选第一条记录的字段到一个变量以以下方式代替 DECLARE V_MARKET_CODE CHAR(1);
DECLARE CURSOR1 CURSOR FOR SELECT MARKET_CODE FROM TB_MARKET_CODE
FETCH FIRST 1 ROWS ONLY FOR UPDATE; OPEN CURSOR1;
FETCH CURSOR1 INTO V_MARKET_CODE; CLOSE CURSOR1;