首页 | 资讯动态 | linux基础 | 系统管理 | 网络管理 | 编程开发 | linux数据库 | 服务器技术 | linux相关 | linux认证 | 嵌入式 | 下载中心 | 专题 | linux招聘 | 镜像站
OKLinux中文技术站
·设为首页
·加入收藏
·联系我们
系统管理: 中文环境 系统管理 桌面应用 内核技术 | Linux基础: 基础入门 安装配置 常用命令 经验技巧 软件应用 | Linux数据库: Mysql Postgre Oracle DB2 Sybase other
网络管理: 网络安全 网络应用 Linux服务器 环境配置 黑客安全 | 编程开发: PHP CC++ Python Perl Shell 嵌入式开发 java jsp | PHP技术: PHP基础 PHP技巧 PHP应用 PHP文摘
搜索中心 Linux招聘 Linux专题 Apache | Linux相关: 硬件相关 Linux解决方案 Linux认证 企业应用 其它Unix | 相关下载: 资料下载 参考手册 开发工具 服务器类 软路由 其它
 技术搜索:
会员中心 注册会员 高级搜索  
  → 当前位置:首页>linux数据库>sybase>正文

Sybase程序设计中极易造成误解的内部规则

http://www.oklinux.cn  2008-06-20  赛迪网 Anna  会员收藏  游客收藏  【 】 
您查看的文章来源于http://www.oklinux.cn

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 重编译仍不能使新增的列被存储过程所识别。解决办法只有一个:删了重建。


上一篇:Fedora 9 vi 中文显示乱码   下一篇:Opera 9.5公布其5天下载量为470万

收藏于收藏夹】 【评论】 【推荐】 【打印】 【关闭
相关文档
·Sybase中不同实现方法间存在的性能差异
·Powerbuilder编程过程中的数据窗口函数
·安装Sybase后新建server时遇到的错误现象
·实例讲解Sybase远程磁带备份的具体步骤
·讲解ASE12.5.1以后提供的WebService功能
·Sybase ASE for Linux安装过程及安全配置
·教你快速掌握Sybase整库复制的具体步骤
·有助于数据创建安全环境的重要功能说明
·关于UltraLite所不提供的ASA功能的介绍
·Sybase操作型BI数据管理与数据集成的介绍
·测试SQL Anywhere数据库性能的具体方法
·通过sp_sysmon对Sybase进行性能诊断
·个人经验总结:Sybase数据库性能优化
·用一个实际案例讲解Sybase数据库日志截断
·个人总结 为Sybase数据库打补丁的详细过程
·讲解Sybase数据库截断和清空日志的方法
发表评论
密码: 匿名评论
评论内容:

(不超过250字,需审核后才会公布,请自觉遵守互联网相关政策法规)
 
  最新文档
·Sybase中不同实现方法间存在的性能差异
·Powerbuilder编程过程中的数据窗口函数
·安装Sybase后新建server时遇到的错误现
·实例讲解Sybase远程磁带备份的具体步骤
·讲解ASE12.5.1以后提供的WebService功
·Sybase ASE for Linux安装过程及安全配
·教你快速掌握Sybase整库复制的具体步骤
·有助于数据创建安全环境的重要功能说明
·关于UltraLite所不提供的ASA功能的介绍
·Sybase操作型BI数据管理与数据集成的介
·测试SQL Anywhere数据库性能的具体方法
·通过sp_sysmon对Sybase进行性能诊断
  阅读排行
·Sybase复制:基于整库复制(warm standby
·解析:快速掌握Sybase数据库的备份与恢
·解析:恢复Sybase SQL Anywhere 数据库
·教你快速掌握Sybase数据库的日常维护
·在操作系统下安装 SQL Anywhere Studio
·如何修改Syabse服务器端的默认字符集
·SQL Anywhere Studio数据库管理和复制
·快速配置 PC 以连接到 Windows CE 设备
·怎样在 Windows CE 上使用数据库服务器
·SQL Anywhere Studio的主要特点及组件
·如何在Sybase数据库中找回丢失的sa密码
·轻松掌握IBM DB2数据库的31个使用技巧
·Sybase按照一定顺序导出bcp out表的字
·细化解析:Sybase存储过程的建立和使用
·怎样使用图形化管理工具Sybase Central
网摘收藏: