分类: DataBase预览模式: 普通 | 列表

db2不能正常显示中文

db2不能正常显示中文,现现乱码问题

客户端执行如下命令即可:

db2set db2codepage=1386

Tags: 乱码 db2不能正常显示中文

分类:DataBase | 固定链接 | 评论: 0 | 引用: 0 | 查看次数: 6

30分钟快速学习C#调用DB2存储过程

30分钟快速学习C#调用DB2存储过程
基本概念:
存储过程即stored procedure,一般会被简称procedure。要学这个先得弄明白另外一个概念:routine,这个一般翻译成“例程”
>>routine:存在server端,按应用程序逻辑编写的,可以通过client或者其他routine调用的数据库对象.
>3种类型:stored procedures,UDFs(自定义function),methods.
stored procedures:作为客户端的扩展但是运行在服务端;UDFs:扩展并且自定义SQL;methods:提供结构化类型的行为
>2种形式:
1)sql routines:完全用sql编写,通过create statement来注册routine.
2)external routines:用C,C++,Java,OLE编写,stored procedure还可用cobol编写。任何语言编写的都可以包含sql。
不同形式的routines可以互相调用,不管是什么语言编写的。

再来看看stored procedure.
>>stored procedures:可以通过call statement被client或者其他routine调用;stored procedures 和它的调用程序通过create procedure statement中的参数交换数据;stored procedures还能给它的调用者返回result sets.
stored procedures的优点:
1) 多个sql statement被调用者一次调用就能全部执行,这能减少client和server间的数据传输。
2)将数据库逻辑与应用程序逻辑隔离开
3)能返回多个result sets
4)如果被应用程序调用,运行起来stored procedure就像应用程序的一部分
缺点:
1)不能被sql statement调用,除了用call
2)返回的结果集不能直接被sql statement使用
3)多次调用之间不能保存调用的状态,即调用之间是独立的,无法传递信息。
一般的应用之处:
1)提供一个interface给一组sql statements。比如同时对多个表的insert操作
2)标准化应用程序逻辑(不理解,就是把db logic与app logic隔离吗?)

开发特性:
明白了这些基本概念后再来看看开发的特性。根据以上得知开发routine的语言有很多,这篇只讲sql procedure(即sql/sql pl写的procedure)。
>>各种语言的特性
sql:
1)效率高于java routine,基本上与c/c++ routine相当
2)完全用sql编写,能很快就能执行(making them quick to implement)
3)DB2认为sql routine是'safe'的因为全是sql,正因如此sql routine能直接在db engine上运行,并且有很好的运行效率和应用范围(good performance and scalability)
>>stored procedure feathures:
parameter modes:
3种类型的参数:1)IN :传入数据到stored procedure 2)OUT: stored procedure 返回数据 3)INOUT: 传入的那部分数据,在执行过程中被返回数据覆盖

result sets:
stored procedure通过cursor来传递结果集给调用者。存储过程必须为每一个需要返回的结果集保留一个游标。
>使用with return to caller/client来指定结果集返回的对象。指定为client将使得中间调用的routine不能获得结果集,只有client才能获得。
>使用dynamic result sets 语句来指定返回结果集的数目,这个数目保存在syscat.routines视图的result_sets字段。如果实际返回的结果集数目大于声明的这个数目,将发出一个warning(sqlcode +464,sqlstate 0100E)
sql stored procedure返回结果集的操作步骤:
1)declare cursor:
如:declare clientcur cursor with return to caller for select * from staff;
2)open the cursor:如 open clientcur;
3)不关闭游标退出stored procedure

开发:
最后终于来到了真正的开发了,刚才讲到sql procedure是由sql,sql pl写的,sql就没什么好说的了。关键说说sql pl (procedural language)
>>功能:控制逻辑流向,声明和设置变量,处理警告和异常。可用于例程(routine),触发器,动态复合语句(单个调用中的sql语句块)
>>控制语句:declare,set,for,get diagnostics,if,iterate,leave,return,signal,while
>>sql pl不能执行的sql:table,index,view的create和drop
>>begin atomic 开头,end 结尾
>>declare :定义变量 和 定义出错处理
declare sql-var-name data-type default default-values
declare condition-name condition for sqlstate value... //这里的condition一般做“异常”解释
>>set:声明变量 和 给触发器定义中的表中的列赋值
set pay = select salary from employee where empno = 5;//仅返回一个值
set pay = null;//空值
set pay = default;//变量定义的默认值
//专用寄存器的内容
set userid = userid;
set today = current date;
//同时给多个变量赋值
set pay =10000,bonus = 1500;
set (pay,bonus) = (10000,1500);
set (pay,bonus) = select (pay,bonus) from employee where empno = 5;
>>if/then/else
三种形式:
1) if then/end if 语句块
2) if then/else/end if
3) if then/elseif /else/end if
可以在if/then/else 语句中使用sql运算符,如:
if (salary between 10000 and 90000) then...
if (deptno in ('a00','b01')) then..
if (exist (select * from employee)) then...
if (select count(*) from employee)>0) then..
>>while
label:
while condition do
...sql pl ..
end while lable; //label可选
>>for:用于循环select返回结果集的行
格式:
label:
for row_label as select satement do
..sql pl..
end for label;//label可选
例子:
for emp as select * from employee where bonus >1000 do
set total_bonus = total_bonus +emp.bonus;
end for;
>>iterate:用来回到for或者while循环的开始重新执行
check_bonus:
for emp as select * from employee do
if(emp.bonus>10000) then
set total_bonus = total_bonus +emp.bonus;
else
iterate check_bonus;
end if;
end for check_bonus;
>>leave:相当于java中的break,需要一个label

>>signal:对出现异常的应用程序报警
signal sqlstate value set message_text = '...';//自定义一个sqlstate,7、8、9和I~Z开头的sqlstate
signal condition set message_text = '...';//自定义异常condition

>>get diagnostics:用在sql pl触发器或语句块(不是函数)内,返回update,insert,delete语句影响的记录数。
get diagnostics variable = row_count;

实例==================================================================================

Create PROCEDURE ADMINISTRATOR.Asm_Duty_Log(
IN IType smallint,
in ILog_ID varchar(36),
in Iproduct varchar(3),
in Iud varchar(1),
in ISHIFT_TYPE smallint,
in Ishift varchar(2),
in Ionduty_time timestamp,
in Ioffline_time timestamp,
in Iworkingday date,
in Iuserid bigint,
in Iworkbenchid bigint,
in Ilast_log_id varchar(36),
OUT OERROR VARCHAR(10))

RESULT SETS 2
MODIFIES SQL DATA
NOT DETERMINISTIC
LANGUAGE SQL
P1: BEGIN
DECLARE TEMPCOUNT int;
Declare userids bigint;
declare offlinetime timestamp;
BEGIN
set OERROR = 'error';
END;
SAVEPOINT SP ON ROLLBACK RETAIN CURSORS;
If (IType = 0) then
  select userid ,offline_time into userids, offlinetime  from asm_duty_log where log_id = Ilast_log_id and workbenchid = iworkbenchid;
  if userids is null then
     begin
      insert into asm_duty_log (log_id,product,ud,shift_type,shift,onduty_time,workingday,userid,workbenchid) values(ilog_id,iproduct,iud,ishift_type,ishift,ionduty_time,iworkingday,iuserid,iworkbenchid);
        set OERROR = 'success';
     End;
  else
     if offlinetime is null then
        if userids = Iuserid then
            begin
          update asm_duty_log set Log_id = ILog_ID where Log_id = Ilast_log_id;
                set OERROR = 'success';
            end;
        else
      begin
              update asm_duty_log set offline_time  = Ionduty_time where Log_id = Ilast_log_id and workbenchid = iworkbenchid ;
              insert into asm_duty_log (log_id,product,ud,shift_type,shift,onduty_time,workingday,userid,workbenchid) values(ilog_id,iproduct,iud,ishift_type,ishift,ionduty_time,iworkingday,iuserid,iworkbenchid);
              set OERROR = 'success';
            end;
        End If;
     else
        begin
             insert into asm_duty_log (log_id,product,ud,shift_type,shift,onduty_time,workingday,userid,workbenchid) values(ilog_id,iproduct,iud,ishift_type,ishift,ionduty_time,iworkingday,iuserid,iworkbenchid);
             set OERROR = 'success';
        end;
     End if;
  end If;
else
  begin
    update asm_duty_log set offline_time = Ioffline_time where Log_id = Ilog_id;
    set OERROR = 'success';
  end;
End If;

If OERROR = 'success' then
 commit;
else
 rollback TO SAVEPOINT SP;
End If;
END P1

=====

查看更多...

Tags: 30分钟快速学习 C#调用DB2存储过程

分类:DataBase | 固定链接 | 评论: 0 | 引用: 0 | 查看次数: 118
color=Red]ASP.NET 2.0使用user profile储存信息前,如何部署aspnetdb.mdf和连接[/color]在解决这个问题的时候走了不少弯路,现将方法总结给大家!希望不会有人想我一样,花了9个小时才弄好。

无论是SQL SERVER 2005还是SQL SERVER EXPRESS都可能遇到这个问题。

前提:当我在项目的Web.Config文件中添加

查看更多...

Tags: ASP.NET 2.0 使用user profile储存信息前 如何部署aspnetdb.mdf和连接

分类:DataBase | 固定链接 | 评论: 0 | 引用: 0 | 查看次数: 403
关于DB2客户端的[IBM][CLI Driver] SQL30081N错误

讨论一下SQL30081N 检测到通信错误
连接测试失败。

[IBM][CLI Driver] SQL30081N  检测到通信错误。正在使用的通信协议:"TCP/IP"。正在使用的通信 API:"SOCKETS"。检测到错误的位置:""。检测到错误的通信函数:"connect"。协议特定的错误码:"10065"、"*"、"*"。  SQLSTATE=08001

查看更多...

Tags: DB2客户端 [IBM][CLI Driver] SQL30081N错误

分类:DataBase | 固定链接 | 评论: 0 | 引用: 0 | 查看次数: 495

数据仓库(Data Warehouse)

数据仓库  1.
  数据仓库是一个面向主题的、集成的、不可更新的、随时间不断变化的数据集合,它用于支持企业或组织的决策分析处理。
  数据仓库,英文名称为Data Warehouse,可简写为DW。
  数据仓库之父Bill Inmon在1991年出版的“Building the Data Warehouse”一书中所提出的定义被广泛接受——数据仓库(Data Warehouse)是一个面向主题的(Subject oriented)、集成的(Integrated)、相对稳定的(Non-Volatile)、反映历史变化(Time Variant)的数据集合,用于支持管理决策(Decision Making Support)。
  ◆面向主题:操作型数据库的数据组织面向事务处理任务,各个业务系统之间各自分离,而数据仓库中的数据是按照一定的主题域进行组织的。
  ◆集成的:数据仓库中的数据是在对原有分散的数据库数据抽取、清理的基础上经过系统加工、汇总和整理得到的,必须消除源数据中的不一致性,以保证数据仓库内的信息是关于整个企业的一致的全局信息。

查看更多...

Tags: 数据仓库 Data Warehouse DW

分类:DataBase | 固定链接 | 评论: 0 | 引用: 0 | 查看次数: 81

DB2入门教程

DB2入门教程

db2start 启动当前实例
db2stop 停止当前实例
db2icrt 创建一个新一实例
db2ilist 显示系统您当前的所有实例清单

查看更多...

Tags: DB2入门教程 基础db2教程

分类:DataBase | 固定链接 | 评论: 0 | 引用: 0 | 查看次数: 120

数据库开发优化

  在数据仓库项目中,由于数据规模庞大,提高数据的查询效率是永恒的主题,常见的优化手段有:
  1、 硬件优化,提高机器性能,增加硬件等
  2、 优化查询语句,将限定性强的where条件放前,用exists代替in操作等
  3、 优化索引,建立有效的索引并检查和修复缺少的统计信息等
  4、 数据库系统文件优化,将数据文件、索引文件、日志文件放置在不同的磁盘上,提高并行度等除了以上方法外,还有一种很重要但易被大家忽略的方法:大表数据分割。当一个表的数据规模达到数亿条时,索引已基本发挥不了作用:建立索引要花费大量时间,查询时由于要扫描大的索引表也要花费大量时间。为了发挥索引的作用,可以将大表按照某个字段拆分为若干个小表。
  例如,国内某大型保险公司,其有36家分公司,一年的保单明细表(f_policy)大概有2亿条记录,两年的数据超过4亿条,如果在f_policy上作一次查询,响应非常慢,可以考虑将f_policy按照机构拆分为36个同构的小表,在作整个保单明细表的查询时,可以使用union all操作合并数据,或者建立一个union all的视图,查询效率大大提高。并且,作这样的拆分非常有用,因为经常会有只查询某个分公司数据的需求。


1 数据库设计
  要在良好的SQL Server方案中实现最优的性能,最关键的是要有1个很好的数据库设计方案。在实际工作中,许多SQL Server方案往往是由于数据库设计得不好导致性能很差。所以,要实现良好的数据库设计就必须考虑这些问题。
  1.1 逻辑库规范化问题
  一般来说,逻辑数据库设计会满足规范化的前3级标准:
  1.第1规范:没有重复的组或多值的列。
  2.第2规范:每个非关键字段必须依赖于主关键字,不能依赖于1个组合式主关键字的某些组成部分。
  3.第3规范:1个非关键字段不能依赖于另1个非关键字段。
  遵守这些规则的设计会产生较少的列和更多的表,因而也就减少了数据冗余,也减少了用于存储数据的页。但表关系也许需要通过复杂的合并来处理,这样会降低系统的性能。某种程度上的非规范化可以改善系统的性能,非规范化过程可以根据性能方面不同的考虑用多种不同的方法进行,但以下方法经实践验证往往能提高性能。
  1.2 生成物理数据库
  要想正确选择基本物理实现策略,必须懂得数据库访问格式和硬件资源的操作特点,主要是内存和磁盘子系统I/O。这是一个范围广泛的话题,但以下的准则可能会有所帮助。
  2 与SQL Server相关的硬件系统
  与SQL Server有关的硬件设计包括系统处理器、内存、磁盘子系统和网络,这4个部分基本上构成了硬件平台,Windows NT和SQL Server运行于其上。
  2.1 系统处理器(CPU)
  根据自己的具体需要确定CPU结构的过程就是估计在硬件平台上占用CPU的工作量的过程。从以往的经验看,CPU配置最少应是1个80586/100处理器。如果只有2~3个用户,这就足够了,但如果打算支持更多的用户和关键应用,推荐采用Pentium Pro或PⅡ级CPU。
  2.2 内存(RAM)
  为SQL Server方案确定合适的内存设置对于实现良好的性能是至关重要的。SQL Server用内存做过程缓存、数据和索引项缓存、静态服务器开支和设置开支。SQL Server最多能利用2GB虚拟内存,这也是最大的设置值。还有一点必须考虑的是Windows NT和它的所有相关的服务也要占用内存。
  Windows NT为每个WIN32应用程序提供了4GB的虚拟地址空间。这个虚拟地址空间由Windows NT虚拟内存管理器(VMM)映射到物理内存上,在某些硬件平台上可以达到4GB。SQL Server应用程序只知道虚拟地址,所以不能直接访问物理内存,这个访问是由VMM控制的。Windows NT允许产生超出可用的物理内存的虚拟地址空间,这样当给SQL Server分配的虚拟内存多于可用的物理内存时,会降低SQL Server的性能。
  2.3 磁盘子系统
  设计1个好的磁盘I/O系统是实现良好的SQL Server方案的一个很重要的方面。这里讨论的磁盘子系统至少有1个磁盘控制设备和1个或多个硬盘单元,还有对磁盘设置和文件系统的考虑。
  3 检索策略
  在精心选择了硬件平台,又实现了1个良好的数据库方案,并且具备了用户需求和应用方面的知识后,现在应该设计查询和索引了。有2个方面对于在SQL Server上取得良好的查询和索引性能是十分重要的,第1是根据SQL Server优化器方面的知识生成查询和索引;第2是利用SQL Server的性能特点,加强数据访问操作。
  3.1 SQL Server优化器
  Microsoft SQL Server数据库内核用1个基于费用的查询优化器自动优化向SQL提交的数据查询操作。数据操作查询是指支持SQL关键字Where或HAVING的查询,如Select、Delete和Update。基于费用的查询优化器根据统计信息产生子句的费用估算。
  了解优化器数据处理过程的简单方法是检测SHOWPLAN命令的输出结果。如果用基于字符的工具(例如isql),可以通过键入SHOW SHOWPLAN ON来得到SHOWPLAN命令的输出。如果使用图形化查询,比如SQL Enterprise Manager中的查询工具或isql/w,可以设定配置选项来提供这一信息。
  3.2 高效的查询选择
  从以上查询优化的3个阶段不难看出,设计出物理I/O和逻辑I/O最少的方案并掌握好处理器时间和I/O时间的平衡,是高效查询设计的主要目标。也就是说,希望设计出这样的查询:充分利用索引、磁盘读写最少、最高效地利用了内存和CPU资源。
  4 性能优化的其他考虑
  上面列出了影响SQL Server的一些主要因素,实际上远不止这些。操作系统的影响也很大,在Windows NT下,文件系统的选择、网络协议、开启的服务、SQL Server的优先级等选项也不同程度上影响了SQL Server的性能。
  影响性能的因素是如此的多,而应用又各不相同,找出1个通用的优化方案是不现实的,在系统开发和维护的过程中必须针对运行的情况,不断加以调整。事实上,绝大部分的优化和调整工作是在与客户端独立的服务器上进行的,因此也是现实可行的。

 

Tags: 数据库开发优化 数据库

分类:DataBase | 固定链接 | 评论: 0 | 引用: 0 | 查看次数: 30
数据库内连接(等值连接,不等连接,不等连接)、外连接(左连接,全连接)

union 不重复
uninon all 重复

2内连接 外连接

查看更多...

Tags: 数据库内连接 等值连接 不等连接 不等连接 外连接 左连接 全连接

分类:DataBase | 固定链接 | 评论: 0 | 引用: 0 | 查看次数: 968

数据库三大范式究竟是什么?

关于数据库三大范式好像有两种说法,一是:
1.字段不可分。
2.有主键,非主键字段依赖主键。
3.非主键字段不能相互依赖。
详情请见:http://zhidao.baidu.com/question/38969745.html

查看更多...

分类:DataBase | 固定链接 | 评论: 0 | 引用: 0 | 查看次数: 435

--自动生成订单号,以时间日期为前缀,后加自动编号

--数据库,存储过程之触发器自动生成订单号

--Create By Lynn

Create TRIGGER [InsertBookList] ON [dbo].[BookList]
FOR Insert
AS
declare @date1 datetime
declare @tempDateStr nvarchar(11)
set @date1 = getdate()
set @tempDateStr = left(Convert(Varchar(4),Year(@date1)),2) + CONVERT(VARCHAR(8),@date1,12)
--print @tempDateStr
--
declare @maxBookOrderNumber bigint
declare @maxListID bigint
select @maxBookOrderNumber=max(BookOrderNumber) from [BookList]
declare @tempHead nvarchar(8)
set @tempHead = left(Convert(Varchar(11),@maxBookOrderNumber),8)
--print @tempHead
--print @tempDateStr

查看更多...

Tags: 数据库 存储过程 触发器 自动生成订单号

分类:DataBase | 固定链接 | 评论: 0 | 引用: 0 | 查看次数: 481