免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2985 | 回复: 7
打印 上一主题 下一主题

SELECT 和存储过程的执行结果不一致 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-11-02 20:53 |只看该作者 |倒序浏览
windows2000 oracle9
建表
tmp(tmp1 char(10))
insert into tmp values('1')

在sqlplus里,
select count(*) from tmp where tmp1 = '1'
结果是1

在存储过程里
create ...... tmp2 ( v_tmp varchar2 )
as
begin
    select count(*) from tmp where tmp1 = v_tmp
end

用execute tmp2('1')执行,结果为 0。

奇怪,何解?

另外,如果
INSERT 的数据长度和字段长度一致, 字段char10, insert char10, 两个过程的处理结果就是一样的。
如果长度不一致,就不一样。

[ 本帖最后由 leigao 于 2006-11-5 11:21 编辑 ]

论坛徽章:
0
2 [报告]
发表于 2006-11-02 23:32 |只看该作者

回复 1楼 leigao 的帖子

呵呵,可能你没有提交;
你COMMIT之后再试.

论坛徽章:
4
处女座
日期:2013-09-01 19:30:07双鱼座
日期:2013-09-28 10:58:45双子座
日期:2014-05-23 08:32:0215-16赛季CBA联赛之八一
日期:2016-04-12 19:55:42
3 [报告]
发表于 2006-11-03 09:22 |只看该作者
select count(*) from tmp where tmp1 = v_tmp

论坛徽章:
0
4 [报告]
发表于 2006-11-05 11:20 |只看该作者
谢谢两位。

我在建表,insert后 commit了的。

至于那个存储过程中的where后面是手误,敲错了,运行的东西是对的。

这个问题好麻烦啊。

论坛徽章:
0
5 [报告]
发表于 2006-11-05 11:22 |只看该作者
谁能帮我看看这个问题啊!

论坛徽章:
0
6 [报告]
发表于 2006-11-05 11:29 |只看该作者
貌似char的存儲結構和varchar2不同

论坛徽章:
0
7 [报告]
发表于 2006-11-05 11:32 |只看该作者
区别:
1.CHAR的长度是固定的,而VARCHAR2的长度是可以变化的, 比如,存储字符串“abc",对于CHAR (20),表示你存储的字符将占20个字节(包括17个空字符),而同样的VARCHAR2 (20)则只占用3个字节的长度,20只是最大值,当你存储的字符小于20时,按实际长度存储。
2.CHAR的效率比VARCHAR2的效率稍高。
3.目前VARCHAR是VARCHAR2的同义词。工业标准的VARCHAR类型可以存储空字符串,但是oracle不这样做,尽管它保留以后这样做的权利。Oracle自己开发了一个数据类型VARCHAR2,这个类型不是一个标准的VARCHAR,它将在数据库中varchar列可以存储空字符串的特性改为存储NULL值。如果你想有向后兼容的能力,Oracle建议使用VARCHAR2而不是VARCHAR。
  
何时该用CHAR,何时该用varchar2?
           CHAR与VARCHAR2是一对矛盾的统一体,两者是互补的关系.
VARCHAR2比CHAR节省空间,在效率上比CHAR会稍微差一些,即要想获得效率,就必须牺牲一定的空间,这也就是我们在数据库设计上常说的‘以空间换效率’。
   VARCHAR2虽然比CHAR节省空间,但是如果一个VARCHAR2列经常被修改,而且每次被修改的数据的长度不同,这会引起‘行迁移’(Row Migration)现象,而这造成多余的I/O,是数据库设计和调整中要尽力避免的,在这种情况下用CHAR代替VARCHAR2会更好一些。



Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=450608

论坛徽章:
0
8 [报告]
发表于 2006-11-05 11:43 |只看该作者
存储过程的参数是不是必须定义为varchar2的?
我在存储过程中定义的内部变量 char类型,将参数的值赋给这个内部变量,去作查询还是查不到结果。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP