当前位置: 首页 > 编程日记 > 正文

db2 基础语法

一、db2 基础

基本语法

注释:“--”(两个减号)
字符串连接:“||”
如set msg=’aaaa’||’bbbb’,则msg为’aaaabbbb’
字符串的引用:‘’(一定用单引号),如果需要输入单引号,输入两个单引号即可。
语句结束:“;”
语法来源:PASCLE

转义字符

如果你想查询字符串中包含‘%’或‘_’ ,就得使用转义字符(Escape Characters)。

比如,要想查询book_title中包含字符串’99%’的纪录:
select * from books where book_title like ‘%99!%%’ escape ‘!
后面的escape ‘
!’是定一个转义字符‘!’, 指明紧跟着转义字符’!'后的%不再是统配符。

DB2命令参数选项

db2 list command options 可以查看
-a 显示 SQLCA OFF 
-c 自动落实 ON 
-e 显示 SQLCODE/SQLSTATE OFF 
-f 读取输入文件 OFF 
-l 将命令记录到历史文件中 OFF 
-n 除去换行字符 OFF 
-o 显示输出 ON 
-p 显示交互式输入提示 ON 
-r 将输出保存到报告文件 OFF 
-s 在命令出错时停止执行 OFF 
-t 设置语句终止字符 OFF 
-v 回送当前命令 OFF 
-w 显示 FETCH/SELECT 警告信息 ON 
-x 不打印列标题 OFF 
-z 将所有输出保存到输出文件 OFF

这些选项的具体功能及其缺省设置为:
.a 显示 SQLCA 的数据,缺省为 OFF。
.c 是否自动落实 SQL 命令,缺省为 ON。
.e {c|s} 显示 SQLCODE 或 SQLSTATE,缺省为 OFF。
.f 文件名将命令的输入从标准输入指定到某一文件,缺省为 OFF。
注:命令“db2 < 文件名”与“db2 -f 文件名”作用相同。
.l 文件名将命令记录到历史文件中,缺省为 OFF。
.n 除去换行字符,缺省为 OFF。
.o 将输出数据及信息送到标准输出,缺省为 ON。
.p 在交互方式下显示命令行处理器的提示信息,缺省为 ON。
.r 将输出保存到指定文件中,缺省为 OFF。
.s 执行批处理文件中或交互方式下的命令出错时即停止执行操作,缺省为 OFF。
.t 设置语句终止字符,缺省为 OFF。
.v 回送当前命令到标准输出,缺省为 OFF。
.w 显示 FETCH 或 SELECT 警告信息,缺省为 ON。
.x 不打印列标题,缺省为 OFF。
.z 文件名将所有输出保存到输出文件,缺省为 OFF。

SQLSTATE含义

在db2命令行方式下输入:? 20012(SQLSTATE值)可以获取sql错误含义

import和export的用法

IMPORT FROM CO_ACCEPTANCEDRAFT.del OF DEL MESSAGES importmsgs.txt INSERT INTO cmmcorc.CO_ACCEPTANCEDRAFT;
EXPORT TO CO_ACCEPTANCEDRAFT.del OF DEL MESSAGES exportmsgs.txt SELECT * FROM cmmcorc.CO_ACCEPTANCEDRAFT;

如果是Sybase导出的文本,并且用TAB分隔符的文档,那么可以采用
db2 import from filename.txt of del modified by COLDEL0x09 insert into tablename;
其中COLDEL是关键字,0x09是16进制,表示tab符号

Load用法

load from tempfile of del modified by delprioritychar replace into TABLENAME nonrecoverable;
说明: 
在不相关的数据表export数据时,可以采取并发的形式,以提高效率;
TABLENAME指待清理table的名称;
modified by delprioritychar防止数据库记录中存在换行符,导致数据无法装入的情况;
replace into对现数据库中的内容进行替换,即将现行的数据记录清理,替换为数据文件内容;
nonrecoverable无日志方式装入;

查询出用户表

SELECT * FROM SYSIBM.SYSTABLES WHERE CREATOR='USER'

如何知道当前DB2的版本?

select * from sysibm.sysversions

如何知道TABLESPACE的状况?

select * from sysibm.SYSTABLESPACES

如何知道INDEX的状况?

select * from sysibm.sysindexes where tbname=’XXXX’
or
describe indexes for table table_name show detail

测试SQL的执行性能

db2batch -d DB_NAME -f select.sql -r benchmark.txt -o p3

select.sql是select语句写在文件中

如何获取连接的进程

List applications

删除当前正在使用的application:

db2 "force application (Id1,Id2,Id3)"

Id1,Id2,Id3 是List显示的应用号;

删除所有的进程

db2 force application all

查看当前应用号的执行状态:

db2 get snapshot for application agentid 299 |grep Row

如何修改缓冲池

db2 alter bufferpool ibmdefaultbp size 10240

如何知道表的字段的状况?

select * from sysibm.syscolumns where tbname=’XXXX’

如何知道DB2的数据类型?

select name,* from sysibm.sysdatatypes

如何知道BUFFERPOOLS状况?

select * from sysibm.sysbufferpools

如何查看表的结构?

describe table table_name
or
describe select * from schema.table_name

如何快速清除一个大表?

alter table table_name activate not logged initally with empty table
or
import from null_file of del replace into table_name

如何查看数据库的包?

select * from syscat.packages

如何查看数据库的存储过程?

select procname,text,* from syscat.procedures
Or
select procname,text from sysibm.sysprocedures
如何查看数据库SAMPLE的配置文件的內容?
get database configuration for sample
or
get db cfg for sample
如何將数据库SAMPLE的参数设置为默认数值?
reset database configuration for sample
or
reset db cfg for sample
如何修改数据库SAMPLE配置参数数值?
update database configuration for sample
using <parameter name> <new value>
or
update db cfg for sample using <parameter name> <new value>
如何重新啟動数据库?
Restart db db_name
如何激活数据库?
Activate db db_name
如何停止数据库?
Deactivate db db_name
如何重命名表?
Rename old_tablename to new_tablename
如何设置DB2环境变量
Db2set命令,语法如下:
Db2set variant=value
如何除去quiesce状态
1. 连接到数据库
2. 用 list tablespaces 判断哪个tablespace处于quiesce状态和和取得对象(object)ID
3. 判断对象ID对应的表
a)用 db2 "select tabname from syscat.tables where tablid=对象ID" 得到表名
b)用 db2 list history 判断是那个表
4. 用 db2 quiesce tablespaces for table 表名 reset 去除quiesce状态
如何实施已删除表的恢复(Dropped Table Recovery)
1. 首先数据库要可以前滚恢复(数据库配置参数logretain或userexit打开)。
2. 对要实施Drop Table Recovery的表空间(限regular tablespace),执行:
alter tablespace 表空间名 dropped table recovery on
3. 用 list history dropped table all for 数据库名 得到删除表的tableid(例如 0000000000006d0000020003)和表结构的生成语句(DDL),记录tableid和该语句以便恢复。之后,用drop命令删除的表中的数据可以在前滚恢复时导出。
4. 恢复数据库后,如果想恢复已删除的表,在前滚时加recover dropped table tableid to 目标目录 。 在该目录下被删除的表中的数据导出,例如导出至 ../NODE0000/data文件。利用上面提到表结构生成语句生成被删除了的表,然后用import命令将数据导入表中。
如何备份数据库
db2 "backup database sample tablespace (syscatspace, userspace1) online to /dev/rmt0 without prompting"
or
db2 "backup database sample user db2admin using db2admin to c:\backup with 3 buffers buffer 1000 without prompting"

如何生成所有对象的DDL

db2look -d DB_NAME -a -e -m -l -f -o filename.sql

如何恢复数据库

restore db db1 to /tstdb2/catalog into db newlogpath /tstdb2/db2log buffer 2048
replace existing redirect parallelism 16;
set tablespace containers for 1 using (path '/tstdb2/db2tmp');
set tablespace containers for 2 using
(device '/dev/rtstcontlv00' 2621440, device '/dev/rtstcontlv01' 2621440,
device '/dev/rtstcontlv02' 2621440, device '/dev/rtstcontlv03' 2621440 ) ;
restore db db1 continue;

恢复完成后,执行db2s命令,如果出错,再执行如下命令:

db2 rollforward db db to end of logs and complete

如何查看数据库目录

1)首先用 db2 list database directory 命令查看系統资料库(System Database Directory)中有沒有该资料库。
如果有,应该再确认该资料库是沒有用的资料库之口用 db2 drop database 资料库名將其刪除。2)如果沒有,再用 db2 list database directory on location 看在本端资料库目录(Local Database Directory)中有沒有該资料库,location指定资料库的位置(如Windows下的C: ,Unix下的/home/db2inst1)。

如何更改本地系统名称

1.db2set db2system=新系统名
2. db2 terminate 
3. db2 uncatalog node 原节点名
4. db2 terminate

如何使用DB2MOVE

db2move DB_NAME action <options> -u USERID –p PASSWORD
Action:export,import,load

Options参数如下: Option Default Notes
-tc table-creators all_creators EXPORT.Wildcard -tn table-names all_user_tables EXPORT.Wildcard -sn schema-names all_schemas EXPORT.Wildcard -ts tblspace-names all_tablespace EXPORT.Wildcard -tf tables from file -io import-option REPLACE_CREATE IMPORT_only. -lo load-option INSERT LOAD_only. -l lobpaths current_dir separated_by_commas.NO -u userid logged_on_userid-p password logged_on_password-aw allow-warnings false includewarnings during export. 例如: db2move ehrdb export –u ehr –p ehr db2move ehrdb import –u her –p ehr

IMPORT如何避免日志满出错

在使用IMPORT命令向数据库出入数据时,如何避免日志空间满错误?在执行IMPORT命令时, 如果使用循环日志, 有时会出现日志满错误, 
这时可用COMMITCOUNT参数来解决. 
因为日志空间满往往是因为所有的日志均处于活动状态导致的. 
而COMMIT执行后, 会释放所占据的资源, 其中包括日志 . 
这样, 被当前事务使用的日志在COMMIT命令执行后, 即变成非活动状态了.

如何处理日值

-日志处理

DB2日志是以文件的形式存放在文件系统中,分为两种模式:循环日志和归档日志。当创建新数据库时,日志的缺省模式是循环日志。在这种模式下,只能实现数据库的脱机备份和恢复。如果要实现联机备份和恢复,必须设为归档日志模式。
目前在综合业务系统中,设置的均是归档日志模式;其它系统(如事后监督、经营决策、中间业务等)一般都设置为循环日志模式。至于采用何种模式,可以通过修改数据库配置参数(LOGRETAIN)来实现: 归档日志模式:db2 update db cfg for using logretain on 注:改为on后,查看数据库配置参数logretain的值时,实际显示的是recovery。改变此参数后,再次连接数据库会显示数据库处于备份暂挂(BACKUP PENDING)状态。这时,需要做一次对数据库的脱机备份(db2 backup db ),才能使数据库状态变为正常。
循环日志模式:db2 update db cfg for using logretain off

-处理步骤

必须按照以下正确的步骤进行操作:
要求必须使用DB2命令PRUNE进行清理,不建议使用rm命令删除。
删除前应保证应用已停止(即联机已下来)。
查看当前使用的日志文件目录及第一活动日志文件
用 “db2 get db cfg for ”命令查看日志文件目录(Path to log files)参数,确定数据库当前使用的日志文件目录。 例如:Path to log files = /db2log/,说明DB2日志存放目录是/db2log
用 “db2 get db cfg for ”命令查看第一活动日志文件(First active log file)参数,该参数对应的日志文件之前的日志文件均为归档日志文件,如果确认没有用,可以删除。例如:First active log file = S0015913.LOG,说明当前第一活动日志文件是S0015913.LOG。 
备份好要删除的归档日志
删除归档日志 以应用用户(如BTP)登录,执行:$ db2 connect to
$ db2 prune logfile prior to S???????.LOG
注:S???????.LOG为查看到的第一活动日志文件。此命令可以将当前第一活动日志文件之前的归档日志文件全部删除。

如何清理db2diag.log文件

db2diag.log,是用来记录DB2数据库运行中的信息的文件。可以通过此文件,查看记录的有关DB2数据库详细的错误信息。此文件也是不断增大的,需要定期进行清理。
可以通过查看实例的配置参数DIAGPATH,来确定db2diag.log文件是放在哪个目录下:db2 get dbm cfg 如果Diagnostic data directory path(DIAGPATH) = /home/db2inst1/sqllib/db2dump,则此文件是放在/home/db2inst1/sqllib/db2dump目录下。当文件系统/home的使用率达到80%-90%左右时,应及时删除db2diag.log文件。

db2diag -A 归档日志

标准函数

length: 返回自变量中的字节数
CAST: 变量类型转换或截断字符串
如:CAST(RESUME AS VARCHAR(370))
Select CAST(colname as integer) from tablename;
decimal: 变量转换为指定精度的数值
如: select decimal(amount,16,2) from tablename;WHERE 子句条件谓词
功能
x = y
x 等于 y
x <> y
x 不等于 y
x < y
x 小于 y
x > y
x 大于 y
x <= y
x 小于或等于 y
x >= y
x 大于或等于 y
IS NULL/IS NOT NULL
测试空值

获取系统日期或系统时间

select current time into curtime from (values 1) as tmp;
select current date into curdate from (values 2) as tmp;
select year(current date) into curdate from (values 2) as tmp; --获取系统年份
select month(current date) into curdate from (values 2) as tmp; --获取系统月份
select day(current date) into curdate from (values 2) as tmp; --获取系统日份
(CURRENT TIMESTAMP 精度达到微秒)

如何预防空值

DB2的COALESCE函数返回()中表达式列表中第一个不为空的表达式,可以带多个表达式, 和oracle的isnull类似。语法格式如下:
CLEASCE(colname,default_value)

多表的关联更新方法

db2的update语法不支持“update table1 set t1.col1=t2.value1 from table1 t1,table2 t2 where …”的写法,但是可以通过如下方法解决:
update table1 t1 set t1.col1=(select t2.col1 from table2 t2 where …)
例:
update test t1 set (t1.username,t1.instcode) = (select t2.instcode,t2.instname from sysinsttb t2 where t2.instcode=t1.instcode);
获取操作(insert、update)的记录数
GET DIAGNOSTICS rcount=ROW_COUNT;注:
get diagnostics rcount =ROW_COUNT; 
只对update,insert,delete起作用. 
不对select into 有效

如何执行RUNSTATS等优化命令

db2 runstats on table <table_name> with distribution and detailed indexes all
db2 reorgchk update statistics on table all

查看什么时候进行了runstats

db2 "select name, stats_time from sysibm.systables"完整执行如下:
db2 connect to ocrm1 user db2iocrm using db2iocrm
db2 runstats on table db2iocrm.eosoperator with distribution and indexes all
db2 reorg table db2iocrm.eosoperator allow read access
db2 reorg indexes all for table db2iocrm.eosoperator allow read access
db2 connect reset

如何获取结果集的前N行数据

Select * from tablename fetch first N rows only

安装DB2默认值?

在WINDOWS或OS/2中默认实例的是DB2

在LINUX或UNIX环境下默认实例的是DB2INST1在WINDOWS或OS
/2中默认帐户的是DB2ADMIN
在LINUX或UNIX环境下默认帐户的是DB2AS

如何定义序列

CREATE SEQUENCE ORDERSEQ START WITH 1 INCREMENT BY 1 NOMAXVALUE NOCYCLE CACHE 24例如:
create sequence pk_only_empid;select NEXTVAL FOR pk_only_empid from (values 1) as tmp;

如何关闭表的日志

  ALTER TABLE TABLE_NAME ACTIVE NOT LOGGED INIALLY

如何获取SQL执行计划

SQL 解释工具

SQL 解释工具提供查询优化器为 SQL 语句所选择的访问计划的有关详细信息。

该信息存储在 EXPLAIN 表中,可以在稍后使用诸如 Visual Explain、db2expln、dynexpln 和db2exfmt 的工具进行格式化,从而以友好的可视方式进行表示。

EXPLAIN 表可以在您第一次使用 Visual Explain 时自动进行创建。即使没有创建它们,您也可以手工进行创建,如下:

% cd <db2 install path>\sqllib\misc 
% db2 connect to bank 
% db2 -tvf EXPLAIN.DDL

本文中,我们使用 db2exfmt 工具。例如,使用 db2exfmt 解释动态 SQL 语句,在 DB2命令窗口中按照下列步骤进行:

% db2 connect to <database_name>
% db2 set current explain mode explain 
% db2 -tvf <Input file with an SQL statement ended with a semicolon>
% db2 set current explain mode no
% db2exfmt -d <dbname> -g TIC -w -1 -n % -s % -# 0 -o <output file>

如何创建事例?

DB2ICRT <client> INSTNAME <...PARAMETERS>
如果是客户端,加上client关键字
例如:
1) 用root登录,命令为smitty创建用户db2inst1,用于数据库管理。
2) 用root登录,使用db2icrt创建实例DB2 实例,使用以下命令。
cd /usr/opt/db2*/instance/
./db2icrt -s client db2inst1
3) 用db2inst1用户登录,创建数据库的本地节点目录,建立远程数据库映射别名,使用以下命令。
cd /usr/opt/db2*/bin
db2 catalog tcpip node wmsint remote 182.247.70.94 server 60000
db2 catalog database wmsint as wmsint at node wmsint
db2set db2codepage=1386

db2 terminate

4) 为了使root用户可以使用db2命令,要把home/db2inst1下的.profile文件中的下面一段文字加到根目录下的.profile中。
PATH=/usr/bin:/etc:/usr/sbin:/usr/ucb:$HOME/bin:/usr/bin/X11:/sbin:.

export PATH

# The following three lines have been added by UDB DB2.
if [ -f /home/db2inst1/sqllib/db2profile ]; then

. /home/db2inst1/sqllib/db2profile

fi

5)退出root用户,重新登入

SQL写法技巧

多个字段时如何不通过使用select子句使用in/not in
select * from tabschema.tabname where (colA, colB, colC) [not] in (values (valueA1, valueB1, valueC1), (valueA2, valueB2, valueC2), ...(valueAn, valueBn, valueCn))Update tablenameA t1
Set (colA,colB,colC)=(selelct b.colA,b.colB,b.colC from tablenameB t2 where t1.key = t2.key)
使用部分命令

列出所有实例 DB2ILIST
获取当前实例 GET INSTANCE
更新事例的配置 DB2IUPDT

删除事例 DB2IDROP INSTANCE_NAME

具体步骤如下:停止事例上所有应用程序
在所有打开的命令行上执行DB2 TERMINATE
运行DB2STOP
备份DB2INSTPROF注册变量指出的事例目录
退出事例所有登陆者使用DB2IDROP
也可以删除ID

列出本地系统上有许可信息的所有产品 DB2LICM -L
增加一产品许可DB2LICM -A FILENAME
删除一个产品的许可 DB2LICM -R PRODUCT PASSWORD
更新已购买的许可数量DB2LICM -U
强制只使用已经购买的数量DB2LICM -E HARD
更新系统上所使用的许可政策类型 DB2LICM -P REGISTERED CONCURRENT
更新系统上的处理器的数量 DB2LICM -N
查询许可文件记录的版本信息 DB2LICM -V
查询DB2LICM的帮助信息 DB2LICM -H

二、存储过程

如何声明一个存储过程
CREATE PROCEDURE 存储过程名(IN 输入变量名 输入变量类型,OUT 输出变量名 输出变量类型)
紧跟其后的是存储过程属性列表
常用的有:LANGUAGE SQL、MODIFIES SQL DATA、RESULT SETS 1(返回结果集个数)
l 存储过程体以begin开始
l 存储过程体以end结束
存储过程约束规则

存储过程中调用存储过程

CALL 存储过程名(参数1,参数2,参数n)
例:
call spco_init_custom(bankcode,errno,errmsg);
GET DIAGNOSTICS retval=RETURN_STATUS;
if(retval<>0) then
set errno=errno;
set errmsg=errmsg;
return errno;
end if; 

变量的定义

变量使用前必须先定义,方法为
DECLARE 变量名 变量类型 (default 默认值)
例:
DECLARE SQLCODE INTEGER DEFAULT 0;
DECLARE inum INTEGER DEFAULT 0;
DECLARE curtime char(8);
DECLARE bcode char(6);
DECLARE sqlstate char(5);if 表达式
if 条件1 then
逻辑体;
elseif 条件2 then
逻辑体;
else
逻辑体;
end if;例:
IF rating = 1 THEN
UPDATE employee
SET salary = salary * 1.10, bonus = 1000
WHERE empno = employee_number;
ELSEIF rating = 2 THEN
UPDATE employee
SET salary = salary * 1.05, bonus = 500
WHERE empno = employee_number;
ELSE
UPDATE employee
SET salary = salary * 1.03, bonus = 0
WHERE empno = employee_number;
END IF;case表达式
case 变量名 when
变量值1 then
. . .
when
变量值2 then
- - -
else
. . .
end case;
或
case when
变量名=变量值1 then
. . .
when
变量名=变量值2 then
- - -
else
. . .
end case;例一:
CASE v_workdept
WHEN 'A00'
THEN UPDATE department
SET deptname = 'DATA ACCESS 1';
WHEN 'B01'
THEN UPDATE department
SET deptname = 'DATA ACCESS 2';
ELSE UPDATE department
SET deptname = 'DATA ACCESS 3';
END CASE;
例二:
CASE
WHEN v_workdept = 'A00'
THEN UPDATE department
SET deptname = 'DATA ACCESS 1';
WHEN v_workdept = 'B01'
THEN UPDATE department
SET deptname = 'DATA ACCESS 2';
ELSE UPDATE department
SET deptname = 'DATA ACCESS 3';
END CASE;for 表达式
for 循环名 as
游标名或select 表达式
do
sql表达式;
end for;例:
1)
DECLARE fullname CHAR(40);
FOR vl AS
SELECT firstnme, midinit, lastname FROM employee
DO
SET fullname = lastname || ',' || firstnme ||' ' || midinit;
INSERT INTO tnames VALUE (fullname);
END FOR2for loopcs1 as cousor1 cursor as 
select market_code as market_code 
from tb_market_code 
for update 
doend for;
goto表达式
goto 标示名;
标示名:
逻辑体;
例:
GOTO FAIL;
...
SUCCESS: RETURN 0
FAIL: RETURN -200while表达式
while 条件表达式 do
逻辑体;
end while;LOOP表达式
LOOP... END LOOP;
例:
OPEN c1;
ins_loop:
LOOP
FETCH c1 INTO v_dept, v_deptname, v_admdept;
IF at_end = 1 THEN
LEAVEins_loop; --中断循环
ELSEIF v_dept = 'D11' THEN
ITERATEins_loop; --下一个循环
END IF;
INSERT INTO department (deptno, deptname, admrdept)
VALUES ('NEW', v_deptname, v_admdept);
END LOOP;
CLOSE c1;关于游标
定义游标:
DECLARE 游标名 CURSOR FOR
Select 语句;
打开游标:
OPEN 游标名;
取值:FETCH 游标名 INTO 变量列表
例:
DECLARE c1 CURSOR FOR
SELECT CAST(salary AS DOUBLE)
FROM staff
WHERE DEPT = deptNumber
ORDER BY salary;
DECLARE EXIT HANDLER FOR NOT FOUND
SET medianSalary = 6666;
SET medianSalary = 0;SELECT COUNT(*) INTO v_numRecords
FROM staff
WHERE DEPT = deptNumber;
OPEN c1;
WHILE v_counter < (v_numRecords / 2 + 1) DO
FETCH c1 INTO medianSalary;
SET v_counter = v_counter + 1;
END WHILE;
CLOSE c1;注:游标的申明如果放在中间段,要用”begin。。。end;”.段分割标志分割开;
动态sql
1) declare stmt varchar(1024);
set stmt='create table zhouhaiming( f1 smallint, f2 varchar(9), f3 char(5) )';
prepare s1 from stmt;
execute s1;
set stmt='insert into zhouhaiming values (1,'www','aaa')';
prepare s1 from stmt;
execute s1;2) DECLARE CURSOR C1 FOR STMT1; 
PREPARE STMT1 FROM 
'ALLOCATE C2 CURSOR FOR RESULT SET ?';

临时表的建立


DECLARE GLOBAL TEMPORARY TABLE TABLE_NAME
AS (FULLSELECT) DEFINITION ONLY
EXCLUDING IDENTITY COLUMN ATTRIBUTES
ON COMMIT DELETE ROWS
NOT LOGGED IN 临时表空间名with replace;
第一行規定臨時表的名稱.
第二行規定臨時表的列的定義.
第三行規定不是從源結果表定義中復制的恒等列.
第四行規定如果沒有打開WITH GOLD光標,將會刪除表的所有行.
第五行規定不對表的改變進行記錄.
With replace选项会隐式的自动删除该临时表。
例如: 
DECLARE GLOBAL TEMPORARY TABLE DEC_BSEMPMS
AS (SELECT * FROM BSEMPMS) DEFINITION ONLY
EXCLUDING IDENTITY COLUMN ATTRIBUTES
ON COMMIT DELETE ROWS
NOT LOGGED;DB2中的几个全局变量
n ROW_COUNT—影响行数
UPDATE CORPDATA.PROJECT
SET PRSTAFF = PRSTAFF + 1.5
WHERE DEPTNO = deptnbr;
GET DIAGNOSTICSrcount = ROW_COUNT;n RETURN_STATUS--返回状态
CALL TRYIT;--调用存储过程
GET DIAGNOSTICSRETVAL = RETURN_STATUS;
IF RETVAL <> 0 THEN
...
LEAVE A1;
ELSE
...
END IF;n SQLSTATE—SQL返回错误代码
注:使用前必先定义
declare sqlstate char(5);
declare state char(5);insert into tbname values(…)
set state=sqlstate;
if(state<> '00000') then
return -1;
end if; 关于ATOMIC和NOT ATOMIC
P1:BEGIN ATOMIC –P1段的事务会自动回滚
P1:BEGIN NOT ATOMIC –P1段的事务不会自动回滚DB2中的条件句柄
句柄类型:
n CONTINUE
n EXIT
n UNDO条件类型:
n SQLSTATE string
n SQLEXCEPTION
n SQLWARNING
n NOT FOUND
例:
1)DECLARE EXIT HANDLER FOR NOT FOUND
SET medianSalary = 6666;
2) DECLARE not_found CONDITION FOR SQLSTATE '02000';
DECLARE EXIT HANDLER FOR not_found
SET rating = -1;
3) DECLARE not_found CONDITION FOR SQLSTATE '02000';
DECLARE c1 CURSOR FOR
SELECT deptno, deptname, admrdept
FROM department
ORDER BY deptno;
DECLARE CONTINUE HANDLER FOR not_found
SET at_end = 1;

如何抽取/提交存储过程

db2 "get routine into 文件名 from procedure 存储过程名" 
抽取存储过程;
提交存储过程
db2 "put routine from 文件名" 
安装已编译好的存储过程。

如何在命令符下提交存储过程

在存储过程的最后加上@符号,然后在命令符下打入:db2 -td@ -vf procfile.sql 就可以生成过程。
非存储过程的SQL文件,在命令符下打入:db2 –tvf sqlfile.sql

从存储过程返回结果集(游标)的用法

1、建一sp返回结果集

CREATE PROCEDURE DB2INST1.Proc1 ( 
LANGUAGE SQL 
result sets 2 --(返回两个结果集) 
P1: BEGIN 
declare c1 cursor with return to caller for 
select market_code 
from tb_market_code; 
--指定该结果集用于返回给调用者 
declare c2 cursor with return to caller for 
select market_code 
from tb_market_code; 
open c1; 
open c2; 
END P1

2、建一SP调该sp且使用它的结果集

CREATE PROCEDURE DB2INST1.Proc2 ( 
out out_market_code char(1)) 
LANGUAGE SQL 
P1: BEGIN 
declare loc1,loc2 result_set_locator varying; 
--建立一个结果集数组 
call proc1; 
--调用该SP返回结果集。 
associate result set locator(loc1,loc2) with procedure proc1; 
--将返回结果集和结果集数组关联 
allocate cursor1 cursor for result set loc1; 
allocate cursor2 cursor for result set loc2; 
--将结果集数组分配给cursor 
fetch cursor1 into out_market_code; 
--直接从结果集中赋值 
close cursor1; 
END P1

转载于:https://www.cnblogs.com/dahaoran/p/9163808.html

相关文章:

Repeater分页代码

//ASP.NET中的DataList和Repeater提供了简单快速的方法來显示,其间&#xff0c;我们可以使用<ItemTemplate>更是使我们能随心所欲的控制数据的排放样式&#xff01; //.可惜的是它们不像Datagrid那样&#xff0c;有内置的分页功能。 // //如何解决呢&#xff1f; // //其…

消失,只为一个人存在……

好像很久很久没有24小时挂在网上了…… 每天收到的短消息来源越来越单一…… 在朋友中消失&#xff0c;所有的来电和消息&#xff0c;都不愿意理会…… 朋友虽然很重要&#xff0c;可是现在只想为一个人存在。 请各位好朋友原谅&#xff0c; 我就是那种重色轻友的人嘛…… 转载…

统一建模语言——UML(第9-20课时)(cont.)

文章目录UML概述UML是什么UML能做什么为什么要学UMLUML构造需求模型用例建模技术绘制用例图识别执行者识别用例检查形式关联关系编写用例文档用例文档的组成部分详细说明检查用例模型状态图定义组成元素复杂一点活动图定义作用组成元素绘制技巧例顺序图定义作用组成元素UML构造…

xunsearch 迅搜初探

2014年1月2日 19:34:12 1 [rootlocalhost bin]# ./php /usr/local/lamp/xunsearch/sdk/php/util/Quest.php demo "俗话说 OR pid:1"2 在 3 条数据中&#xff0c;大约有 2 条包含 俗话说 OR pid:1 &#xff0c;第 1-2 条&#xff0c;用时&#xff1a;0.0036 秒。3 4 1…

Aria2打造属于自己的下载神器

请关注微信公众号( ?sharingplus) 我使用Aria2差不多已经2年了。在这段时间使用很多下载工具&#xff0c;最开始使用的是迅雷极速版 、后面各种原因不好使了。Free Download Manager、uTorrent、qBittorrent、BitComet、IDM等等全部折腾了一遍。各有千秋&#xff0c;在上面中使…

GARFIELD@12-10-2004

无所不用其极 转载于:https://www.cnblogs.com/rexhost/archive/2004/12/10/75223.html

机器学习中的三对性能度量参数

文章目录1 分类结果混淆矩阵2 错误率和精度3 查准率P和查全率R4 真正例率TPR和假正例率FPR1 分类结果混淆矩阵 2 错误率和精度 错误率&#xff1a;分类错误的样本数占样本总数的比例 精度&#xff1a;分类正确的样本数占样本总数的比例 关系&#xff1a;两者之和为1 3 查准率…

管理输入光标的 WIN32 API 函数

下面的 API 函数是用来管理输入光标的 API 函数&#xff0c;下面是在使用C#时声明的这些函数&#xff1a; /**//// <summary> /// 参数说明&#xff1a; /// hwnd : 要创建光标的控件的句柄 /// hbm : 一个位图的句柄&#xff0c;如果指定则使用指定…

linux 防火墙 -netfilter

2019独角兽企业重金招聘Python工程师标准>>> 关于iptables 什么是iptables? 常见于linx系统下的应用层防火墙工具 firewalld 和netfilter Linux 防火墙-netfilter selinux 临时关闭 setenforce 0selinux 永久关闭 vi /etc/selinux/configcentos7 之前使用 netfilte…

信号完整性 带宽的确定

对于只包含很少电容的电路&#xff0c;可认为是梯形边沿&#xff0c;最大带宽可以采用 f1/tr.其中tr为上升时间。 对于有容性负载的电路&#xff0c;可以认为是指数边沿&#xff0c;最大带宽可以采用f4/tr.其中tr为上升时间。 参考书籍《数字信号完整性&#xff1a;互连、封装的…

验证(verification)和确认(validation)

验证&#xff1a;看软件产品是否符合需求文档 确认&#xff1a;看软件产品是否满足用户需求 整个软件测试做的事是验证

dva + antd + mockjs 实现用户管理

1.安装dva-cli npm install dva-cli -g 2.创建应用 dva new dvadashboard [dvadashboard为项目名] 3.安装mockjs npm install mockjs --save4.配置mockjs 打开.roadhogrc.mock.js 设置如下const fsrequire(fs); const pathrequire(path); const mockPathpath.join(__dirname/…

用S60操作系统SDK开发NOKIA手机应用程序(4)- 界面层框架及一些特性

Uikon和Avkon Series 60 将一个用户界面层(Avkon)添加在Symbian OS v7.0s 底层的Uikon 之上。Uikon是Symbian 核心用户界面&#xff0c;Avkon是S60平台的用户界面。Avkon 提供了一 套UI 组件和一个专为Series 60 设备设计的软件框架。UIKON 是所有Symbian OS设备都支持的一种用…

VS2010 发布web项目 问题

载&#xff1a;http://www.cnblogs.com/shaocm/archive/2012/08/10/2632116.html 转载于:https://www.cnblogs.com/zcttxs/p/3507007.html

软件生命周期中出现的文档名称(cont.)

需求相关&#xff1a;需求规格说明书 测试相关&#xff1a;测试计划书&#xff0c;测试报告

转:45 Useful JavaScript Tips, Tricks and Best Practices

原文来自于&#xff1a;http://flippinawesome.org/2013/12/23/45-useful-javascript-tips-tricks-and-best-practices/ 1 – Don’t forget var keyword when assigning a variable’s value for the first time. Assignment to an undeclared variable automatically results…

聊聊spring cloud gateway的PreserveHostHeaderGatewayFilter

序 本文主要研究下spring cloud gateway的PreserveHostHeaderGatewayFilter GatewayAutoConfiguration spring-cloud-gateway-core-2.0.0.RC2-sources.jar!/org/springframework/cloud/gateway/config/GatewayAutoConfiguration.java Configuration ConditionalOnProperty(name…

静态测试与测试计划

文章目录1 静态测试2 评审2.1 what2.2 why2.3 形式2.4 分类2.4.1 属于软件测试的部分2.4.2 属于软件质量保证的部分&#xff1a;3 需求测试3.1 why3.2 需求中可能存在的问题3.3 需求文档检查要点3.3.1 完整性3.3.2 正确性3.3.3 一致性3.3.4 可行性3.3.5 无二义型3.3.6 健壮性3.…

中国HBase技术社区第一届Meetup资料大合集

2018年6月6号&#xff0c;由中国HBase技术社区组织&#xff0c;阿里云主办的中国第一次HBase Meetup在北京望京阿里中心举行&#xff0c;来自阿里、小米、滴滴、360等公司的各位HBase的PMC、committer共聚一堂&#xff0c;共同探讨HBase2.0的技术革新以及HBase在国内各个大型企…

寻找历史!!!

“你一点都不了解中国”。在大约四年的时间里&#xff0c;我几乎每天都听到类似的批 评。每周一的中午&#xff0c;我坐着红色的出租车沿着三环路前往上班地点。尽管北京拥有 世界上最宽阔的道路&#xff0c;但在早晨与傍晚时&#xff0c;那些亨利福特&#xff34;型车的后代们…

wikioi 1083 Cantor表

找规律题 现代数学的著名证明之一是Georg Cantor证明了有理数是可枚举的。他是用下面这一张表来证明这一命题的&#xff1a; 1/1 1/2 1/3 1/4 1/5 … 2/1 2/2 2/3 2/4 … 3/1 3/2 3/3 … 4/1 4/2 … 5/1 … … 我们以Z字形给上表的每一项编号。第一项是1/1&#xff0c;然后是1/…

hung-yi lee_p3_线性回归

文章目录本节目的解决过程损失函数解损失函数&#xff08;by梯度下降&#xff09;改进模型矫枉过正解决方案本课结论本节目的 找到这样一个函数&#xff0c;输入宝可梦当前的CP(Combat Point)值&#xff0c;得到它进化后的CP值。 解决过程 损失函数 函数的函数&#xff1a;衡…

PHP简单封装MysqlHelper类

MysqlHelper.class.php 1: <?php 2: 3: /** 4: * Mysql数据帮助类 5: */ 6: class MysqlHelper 7: { 8: function __construct() 9: { 10: if(isset($conn)){return;} 11: //创建连接对象 12: $this->connmysql_connect($this->…

python之XML文件解析

python对XML的解析 常见的XML编程接口有DOM和SAX&#xff0c;这两种接口处理XML文件的方式不同&#xff0c;当然使用场合也不同。 python有三种方法解析XML&#xff0c;分别是SAX&#xff0c;DOM&#xff0c;以及ElementTree三种方法。 以下案例依次介绍三种方法&#xff1a; 先…

这句话真他妈经典

研究解决一个问题的时候&#xff0c;通常花百分之二十的时间和精力&#xff0c;就能抓住问题的百分之八十&#xff0c;而为了完善那余下的百分之二十&#xff0c;却往往要花百分之八十的时间和精力 这句话真他妈经典&#xff0c;呵呵 转载于:https://www.cnblogs.com/webcool…

hung-yi lee_p4_Bias And Variance

文章目录本节目的biasvariance结论&#xff08;鱼和熊掌不可得兼&#xff09;如何解决减小bias的方案减小variance的方案对训练集进行处理得到更好的模型本节目的 where does the error come from?&#xff08;为什么最复杂的模型反而Loss函数的值越大&#xff09; error有…

感觉 Data Access Application Block(DAAB) 里也有可能写得不太好的地方

昨天下载了博客园的代码&#xff0c;里面有一个Data\SqlServer.cs我不清楚是不是 MS DAAB 里的原样文件。不过前面有声明如下&#xff1a;////Microsoft Data Access Application Block for .NET 3.0////SqlServer.cs////This file contains the implementations of the AdoHel…

微软压力测试工具 web application stress

WEB服务器的压力测试工具~ 115808 2009年8月1日lbimba 铜牌会员 这里给广大的煤油推荐一个web网站压力测试工具。它可以用来模拟多个用户操作网站&#xff0c;在程序投入运行时&#xff0c;可以用它来进行程序的测试并得到Web站点的稳定 参数&#xff0c;甚至于可以对一台小型的…

Didn't find class net.oschina.app.AppContext on

原因 你引入的Lib 未打钩 然后在 菜单Project -> Properties -> Java Build Path -> Order & Export, 然后选中你未打钩的, 然后菜单 Project->Clean&#xff0c;然后运行程序即可。转载于:https://blog.51cto.com/12237592/2129523

hung-yi lee_p5-7_Gradient Descent(梯度下降)

原视频地址 https://www.bilibili.com/video/BV1JE411g7XF?p5 文章目录梯度下降是如何优化函数的tips1. 使用Adagrad2. Stochastic Gradient Descent3. Feature Scaling梯度下降理论基础梯度下降的局限性梯度下降是如何优化函数的 前情回顾&#xff1a;损失函数是用来衡量找到…