<%@ page contentType="text/html; charset=gb2312"%> Sybase编程中出现的错误及其解决办法
网站公告:   ◆北天JAVA技术网热情为java爱好者服务,本网内容包括JAVA(JSP、servlet、EJB、webservice、j2ee、javabean、应用服务器、JavaScript),数据库(MYSQL、SQL Server、Sybase、Oracle、DB2、数据库综合知识),设计研究(设计模式、Struts、Spring、Hibernate、设计框架、设计综合知识),WEB2.0新技术(主要介绍AJAX),以及各种技术的入门、实例、例子等等,欢迎各位多来坐坐!◆  诚邀各位JAVA爱好者加盟!◆  本网站内容丰富,更新快,保证每周20篇以上!  
加入收藏
设为首页
联系站长
承接项目
  相关资源:网站首页 | 免费培训学院 | 技术论坛 | JAVA聊天室 | 作家专栏 | 开发工具 | 认证考试 | 会员俱乐部
  JAVA技术初学者园地 | jsp与servlet | javascript | Java源代码 | EJB | web service | 应用服务器 | JAVA综合知识
  设计研究设计模式 | 设计框架 | Struts | Spring | Hibernate | 开源项目 | 面向对象设计 | 设计综合知识
  数 据 库MYSQL | SQL Server | Sybase | Oracle | DB2 | Informix | Access | 数据库综合知识
  其他资源:AJAX新技术 | 网站开发 | ERP软件 | OA办公软件 | 商业智能BI | 开发综合知识 | 承接项目 | 项目试用

 
 
Sybase编程中出现的错误及其解决办法
     发布者: 发布时间:2006-12-30

SYBASE 数据库是当今在UNIX环境下最为流行的大型数据库之一,本人在SYBASE下开发和维护软件的过程中,发现了一些SYBASE的内部规则,在程序设计中极易造成误解,而达不到预期的目的。下文将本人所发现的几个问题及其解决办法叙述如下:

1、在sybase11.5中,组合两个定长的 char(x)="aaa",char (y)="bbb"; char(x)+char(y)!="aaabbb"

declare @val_1 char(8) 
declare @val_2 char(1) 
select @val_2 = 'x' 
select @val_1 = "0000" 
select @var_1= @val_1 + @val_2 
select @var_1

我们期望的结果为0000x, 而实际上其结果为0000。

解决方法一:当我们将"select @var_1=@val_1+@val_2",改为"select @var_1=rtrim(@var_1)+@var_2"时,我们便看到了我们所期望的结果。为什么呢?在有的SYBASE版本中存储一个char(n)时,在其真实值后补上了相应数量的空格,在本例中,存储在@var_1中的是0000 (在0000后有四个空格)。你可以加上如下两句来验证:

declare @val3 char(10) 
select @val3 = @val_1 + @val_2 
select @val3

这时你会得到的结果为0000 x (在0000后有四个空格)。

解决方法二:将char 改为 varchar 也可以达到预期的目的。

2、用alter table 增加表结构时,虽然用sp_recompile tablename 重编译了所影响的数据库对象,但在运行某些包含"select * from tablename"的存储过程时,存储进程仍不认识用alter table 增加的列。例:

1> create table tmp(aa int,bb int) 
2> go 
1> create table b_tmp(aa int,bb int) 
2>go 
1> create proc tmpstore 
2> as  
1> insert b_tmp select * from tmp 
2> return 
3> go 
1> alter table tmp add cc char(8) null 
2> go 
1> alter table b_tmp add cc char(8) null 
2> go 
1> sp_recompile tmp 
2> go 
1>insert tmp values(12,1234,"abcdefg") 
2>go 
1> exec tmpstore 
2> go 
1> select * from b_tmp 
2> go 
aa??????bb??????cc 
----------- ------------- ------------- 
12??????1234?????NULL

为什么cc字段是NULL,而不是"abcdefg"? 用alter table 增加表结构后,包含"select * from tablename"的存储过程,用sp_recompile tablename 重编译仍不能使新增的列被存储过程所识别。解决办法只有一个:删了重建。

(T115)

(转载文章请保留出处:北天JAVA技术网(www.java114.com))
 
更多精彩文章:
关于Oracle数据库中的汉字显示总结
Ajax 之经典应用
如何学习AJAX
JSP高访问量下的计数程序
测试你对技术的掌握度:JSP程序员成长之路
JSP三种页面跳转方式的比较
 
最近评论:
        
你曾悄悄的来过!
wow gold,wow gold,wow gold,ffxi gil max(849)
        
你曾悄悄的来过!
wow gold,wow gold,wow gold,ffxi gil max(6290)
        
冰封的往事!
wow power leveling,wow gold,WoW Gold,wow gold max(2447)
        
飞舞的传奇!
传世私服,传世私服.传奇世界私服传奇世界私服,传世私服传世私服, 传奇世界私服传奇世界私服.传奇私服传奇私服. max(7366)
        
标 题:   
内 容:   
 
                                  
 
免责声明:该文章由网友发表,如果对您造成侵权,请联系站长

首页 - 承接项目 - 网站地图 - 联系我们 -
版权所有北天JAVA技术工作室 ICP证号:粤ICP备06079815号