使用IBM DB数据库时必须了解的几个知识点
在安装DB数据库后你可以通过命令行方式或图形界面方式来操作假如你的数据库服务端不在本机则需要在客户机配置辅助程序中做一个客户端连接的配置
控制中心中无法增删改数据只能编写sql语句来实现而quest提供的工具虽然能增加数据但居然无法用复制粘贴和Tab键必须逐个输入然后用鼠标点击切换现存数据看来可以在单元格中编辑修改但实际却无法commit呵呵还是老老实实写update语句至于删除数据更是非写delete语句不可不过可以用pb以单元格方式编辑数据相应的一个缺点是编辑数据的按钮和删除表的按钮太近万一点错了删除表的按钮pb可是不作提示就把表给删了的faint
DB的视图里不能直接用order by语句必须这样写
select × from(select a
b
c from table
order by a)astab
注释这种写法的前提是你已经打过补丁了
存储过程的问题
DB提供ltrim函数和rtrim函数但偏偏不提供trim函数如果你希望去除字符两端的空格对不起必须用ltrim(rtrim()) 的方式调用insert 语句里面居然不能用表达式赋值必须把值先赋给一个变量调用其他存储过程时竟然不能用常量做参数必须把这个常量的值赋给一个变量再以这个变量为参数
select * from table fetch first n rows only 语句居然在存储过程里不可用
存储过程里可以使用动态sql但函数里却不可以使用kao
遇到commit或rollback时自动关闭游标所以需要慎重使用单独提交
proc builder老是在调试中内存不足屏幕花掉而如果断点调试时暂停不进行下去的时间稍微长一点就会提示超时受不了
开发问题
在使用 日期变量+ MONTHS OR 日期变量 MONTHS 的方式取日期时比如日期变量值为 时存储过程里将日期变量+ MONTHS 赋值给另一
日期变量时会出错相应SQLSTATE为(db ? ) 对 DATE 或TIMESTAMP值进行了调整以校正算术运算得出的无效日期
如果要获取的只是下一月份可采用的替代方法是获取当前日期所在月份的第一天作为基准后+ MONTHS OR MONTHS
对变量的赋值不能用select ……into ……方式而要用set v=(select ……)的方式
具体的示例如下
drop function SXFMISORDERSUBMITDATE;
CREATE FUNCTION SXFMISORDERSUBMITDATE(IN_ROW_ID DECIMAL())
RETURNS DATE
LANGUAGE SQL
BEGIN ATOMIC DECLARE V_SUBMIT_DATE DATE;
DECLARE V_SELL_ID DECIMAL( );
DECLARE V_BUY_ID
DECIMAL( );
set V_SELL_ID = (SELECT COALESCE(RECEIVE_ID) FROM IS_ORDER WHERE ROW_ID=IN_ROW_ID);
set V_BUY_ID = (SELECT COALESCE(PAY_ID) FROM IS_ORDER WHERE ROW_ID=IN_ROW_ID);
set V_SUBMIT_DATE = (SELECT DATE(MAX(ASUBMIT_DATE)) FROM AM_AUDIT_QUEUE ASM_US
ER BSM_USER C
WHERE ATABLE_CODE=IS_ORDER
AND ATABLE_ROW_ID=IN_ROW_ID
AND AAUDIT_EMP_ID=CROW_ID AND CBRANCH_ID=V_BUY_ID 审核方为付款方AND ASUBMIT_EMP_ID=BROW_ID AND BBRANCH_ID=V_SELL_ID); 提交方为收款方
RETURN V_SUBMIT_DATE;
END;
#SYNC ;