DB2编程序技巧(1)

   2015-06-30 0
正在看的db2教程是:DB2编程序技巧(1)。
1 DB2编程 

1.1 建存储过程时Create 后一定不要用TAB键 

create procedure 

的create后只能用空格,而不可用tab健,否则编译会通不过。 

切记,切记。 

1.2 使用临时表 

要注意,临时表只能建在user tempory tables space 上,如果database只有system tempory table space是不能建临时表的。 

另外,DB2的临时表和sybase及oracle的临时表不太一样,DB2的临时表是在一个session内有效的。所以,如果程序有多线程,最好不要用临时表,很难控制。 

建临时表时最好加上  with  replace选项,这样就可以不显示的drop 临时表,建临时表时如果不加该选项而该临时表在该session内已创建且没有drop,这时会发生错误。 

1.3 从数据表中取指定前几条记录 

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; 

1.4 游标的使用 

注意commit和rollback 

使用游标时要特别注意如果没有加with hold 选项,在Commit和Rollback时,该游标将被关闭。Commit 和Rollback有很多东西要注意。特别小心 

游标的两种定义方式 

一种为 

declare continue handler for not found 

begin 

set v_notfound = 1; 

end; 

declare cursor1 cursor with hold for select market_code from tb_market_code  for update; 

open cursor1; 

set v_notfound=0; 

fetch cursor1 into v_market_code; 

while v_notfound=0 Do 

--work 

set v_notfound=0; 

fetch cursor1 into v_market_code; 

end while; 

close cursor1; 

这种方式使用起来比较复杂,但也比较灵活。特别是可以使用with hold 选项。如果循环内有commit或rollback 而要保持该cursor不被关闭,只能使用这种方式。

 另一种为 

pcursor1: for loopcs1 as  cousor1  cursor  as 

select  market_code  as market_code 

from tb_market_code 

for update 

do 

end for; 

这种方式的优点是比较简单,不用(也不允许)使用open,fetch,close。 

但不能使用with  hold 选项。如果在游标循环内要使用commit,rollback则不能使用这种方式。如果没有commit或rollback的要求,推荐使用这种方式(看来For这种方式有问题)。 

修改游标的当前记录的方法 

update tb_market_code set market_code=0 where current of cursor1; 

不过要注意将cursor1定义为可修改的游标 

declare cursor1 cursor for select market_code from tb_market_code  

for update; 

for update 不能和GROUP BY、 DISTINCT、 ORDER BY、 FOR READ ONLY及UNION, EXCEPT, or INTERSECT但 UNION ALL除外)一起使用。 

1.5 类似decode的转码操作 

oracle中有一个函数  select decode(a1,1,n1,2,n2,n3) aa1 from 

db2没有该函数,但可以用变通的方法 

select case a1  

when 1 then n1  

when 2 then n2  

else n3 

  end as aa1 from 

1.6 类似charindex查找字符在字串中的位置 

Locate(‘y','dfdasfay') 

查找'y' 在'dfdasfay'中的位置。 

1.7 类似datedif计算两个日期的相差天数 

days(date(‘2001-06-05')) – days
 
反对 0举报 0 评论 0
 

免责声明:本文仅代表作者个人观点,与乐学笔记(本网)无关。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
    本网站有部分内容均转载自其它媒体,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责,若因作品内容、知识产权、版权和其他问题,请及时提供相关证明等材料并与我们留言联系,本网站将在规定时间内给予删除等相关处理.

  • com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in your SQL syntax;问题的解
    com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxE
      哇,时隔两天时间,终于找到这个问题的解决办法,先看问题  这是我最近写的家庭记账本网页版,按顺序输入点击保存,总是弹出添加失败的提示 顺着找原因,把原因锁定在dao层的sql语句上,反复检查,没有找到一点毛病,程序其他地方也没有错误,这让我郁
    02-10
  • ndb的sql语法跟mysql SQL语法不一直的地方
    1,不支持临时表在NDB存储引擎中,不支持临时表;不能创建临时表和改变已经存在的临时表的引擎为NDB;否则报“Table storage engine 'ndbcluster' does notsupport the create option 'TEMPORARY'. ”。2,索引和键的限制(1),创建索引时,列宽不超过3072bytes;(
    02-10
  • 解决JDBC连接MySQL 8时得异常:java.sql.SQLExc
    使用原来基于MySQL 5.1的JDBC代码运行时,报错:java.sql.SQLException: The server time zone value '�й���׼ʱ��' is unrecognized or represents more than one time zone. You must configure either the server or JDBC driver (via the serverTi
    02-10
  • db2,oracle,mysql ,sqlserver限制返回的行数
    不同数据库限制返回的行数的关键字如下:①db2select * from table fetch first 10 rows only; ②oracleselect * from table where rownum=10; ③mysqlselect * from table limit 10; ④sqlServerselect top 10 * from table;
    02-10
  • Logstash-input-jdbc同步mysql数据到ES - sql_last_value
    Logstash-input-jdbc同步mysql数据到ES - sql_
    问题:使用 Logstash-input-jdbc同步mysql到ES, 当中使用了 sql_last_value ,如何重新同步?答: logstash把上一次同步的最后一条记录id写到 c:\用户\{登陆名}\.logstash_jdbc_last_run文件中,只要删除这个文件即可。如下图环境如下:1. windows 102. elas
    02-10
  • Oracle 史上最全近百条Oracle DBA日常维护SQL脚
     史上最全近百条Oracle DBA日常维护SQL脚本指令  http://blog.itpub.net/30126024/viewspace-2057474/ ---具体SQL如下 查询碎片程度高(实际使用率小于30%)的表可以收缩的表条件为什么block100,因为一些很小的表,只有几行数据实际大小很小,但是block
    02-10
  • C#操作SqlServer MySql Oracle通用帮助类Db_Helper_DG(默认支持数据库读写分离、查询结果实体映射ORM)
    C#操作SqlServer MySql Oracle通用帮助类Db_Hel
    【前言】  作为一款成熟的面向对象高级编程语言,C#在ADO.Net的支持上已然是做的很成熟,我们可以方便地调用ADO.Net操作各类关系型数据库,在使用了多年的Sql_Helper_DG后,由于项目需要,于是乎,就准备写一个Mysql_Helper在实现过程中,发现ADO.Net封装之
    02-10
  • ORACLE、MYSQL的JDBC配置 oracle mysql jdbc
    info.jdbc.driverClassName=oracle.jdbc.driver.OracleDriverinfo.jdbc.url=jdbc:oracle:thin:@192.168.182.100:1521:orclinfo.jdbc.username=infoinfo.jdbc.password=xyxxh6hibernate.show_sql=truemoodle.jdbc.driverClassName=com.mysql.jdbc.Drivermoodle
    02-10
  • IDEA 中Spark SQL通过JDBC连接mysql数据库
    一.IDEA装驱动:1.下载一个MySQL的JDBC驱动:mysql-connector-java-5.1.44.tar.gz2.在idea Open Moudle Settings 在 Moudle中   选Dependencies + JDC驱动的解压位置 选(mysql-connector-java-5.1.44-bin)这个就ok二.程序:import java.util.Propertiesim
    02-10
  • java.sql.SQLException: No value specified fo
    public boolean updateMemberslnfo(MembersInfo membersInfo) throws SQLException{StringBuffer sqlBuffer = new StringBuffer("UPDATE membersinfo SET ");boolean check = true;ListObject params = new ArrayListObject();if(membersInfo.getMname()!=nul
    02-10
点击排行