解决方案 »
- 关于连接查询和单次查询的效率问题?
- oracle登入问题
- 遇到IMP-00017: following statement failed with ORACLE error 1
- 问大家一个关于oracle的cursor里面用continue的问题,麻烦了。。。
- 新手请教一个关于V$SQL等视图的巨难问题。呵呵:)
- PL/SQl怎么测试一个sql语句的性能?
- 10) 在Orcale中,在SQL提示符下调用PL/SQL过程的方法是()。
- 求助 oracle 与access 实现数据互导 ~
- (500)求1000万条记录的高效分页,各种方法均可,在jsp环境下?(表如下)给个例子!!!!(急等)
- 我在oracle 的SQL PLUS里插的数据怎么看不倒??
- 怎样 来自不同用户下的要有关系表来构建视图???
- 弱弱的问一下 oracle能不能在查询出来的同时,对查询结果做计算?
scott@YPCOST> insert into binary_test(
2 bin_float,bin_double)
3 values(39.5f,15.7d)
4 /已创建 1 行。scott@YPCOST> ed
已写入 file afiedt.buf 1 insert into binary_test(bin_float,bin_double)
2* values (binary_float_infinity,binary_double_infinity);
scott@YPCOST> /
values (binary_float_infinity,binary_double_infinity);
*
第 2 行出现错误:
ORA-00911: 无效字符--解释下为什么上面的语句会报错 因为是通过ed进行编辑的 然后通过回车符进行执行
--最后一个;就是多余的了
scott@YPCOST> ed
已写入 file afiedt.buf 1 insert into binary_test(bin_float,bin_double)
2* values (binary_float_infinity,binary_double_infinity)
scott@YPCOST> /已创建 1 行。--例如上面把;去掉就正常了
scott@YPCOST> ed\scott@YPCOST> ed
已写入 file afiedt.buf 1* select * from binary_test;
scott@YPCOST> /
select * from binary_test;
*
第 1 行出现错误:
ORA-00911: 无效字符--这个也是同样的道理
--而下面的语句是直接写的语句(没有通过ed进行编辑) 用;结束 然后执行
scott@YPCOST> select * from binary_test; BIN_FLOAT BIN_DOUBLE
---------- ----------
3.95E+001 1.57E+001
Inf Inf
binary_double_nan 表示不是一个二进制双精度浮点数,当然就不是一个binary_double类型
既然不是binary_float和binary_double类型,就不要向此类型的列中插入,
报not a number是自然的。
binary_float_infinity,binary_double_infinity,它是这个类型自然是没有问题的。
--你没理解我的意思,首先我的操作没有错误!嘿嘿
--我是想知道,为什么我添加到表中的两条数据怎么查不出来?
--我知道他两binary_float_nan,binary_double_nan是非binary_float和binary_double的数字,但是明明另外--还有一条数据的,怎么那条数据也不会显示出来呢?
--而我是通过PL/SQL Developer编辑的,没用到ed命令在notepad里面编辑。
select count(*) from test_binary
ORA-00942: 表或视图不存在
SQL> select count(*) from binary_test;
COUNT(*)
----------
3
SQL> select * from binary_test where rownum<=1;
BIN_FLOAT BIN_DOUBLE
---------- ----------
39.5 15.7
SQL> select * from binary_test where rownum<=2;
BIN_FLOAT BIN_DOUBLE
---------- ----------
39.5 15.7
1E126 1E126
SQL> select * from binary_test where rownum<=3;
select * from binary_test where rownum<=3
ORA-01722: invalid number
SQL>
BIN_FLOAT BIN_DOUBLE
---------- ----------
39.5 15.7
1E126 1E126
SQL>
--谢谢各位的积极参与
SQL> select to_char(bin_float) cl,to_char(bin_double) c2 from binary_test where rownum<=3;
CL C2
---------------------------------------- ----------------------------------------
Nan Nan
3.61199989E+001 5.6415449999999998E+002
--为何执行这句话的时候,什么也查不出来呢?是第三条数据(非数)影响到了整个查询吗?
SQL> select * from binary_test where rownum<=3;
select * from binary_test where rownum<=3
ORA-01722: invalid number
--也就是说nan影响到了整个查询了!
--那可不可一得出这样的结论呢?
--当表里面有一个binary_float或binary_double类型列时,给其赋值nan,将会影响到所有的查询操作?
--也就是说nan影响到了整个查询了!
--那可不可一得出这样的结论呢?
--当表里面有一个binary_float或binary_double类型列时,给其赋值nan
--将会影响到所有关于此列的select * 或者select a.*的查询操作?
不要用 PL/SQL Developer 作此实验,在plsql下不支持数据和nan同时显示,
可以用 SQL*Plus,其实就和 IS NULL 一样。 NULL 用于在数据库
的所有数据类型的列中存储“不知道”,然后用 IS NULL 来判断。
现在 NaN用于在 BINARY_DOUBL/BINARY_FLOAT 浮点类型
的列中存储“不是数字”和“无限数字”,然后用 IS NaN或者是is inf
具体测试如下SQL> create table binary_test
2 (bin_float binary_float,
3 bin_double binary_double);表已创建。SQL> insert into binary_test (bin_float, bin_double) values (39.5f, 15.7d);已创建 1 行。SQL> commit;提交完成。SQL> insert into binary_test(bin_float,bin_double)
2 values(binary_float_infinity,binary_double_infinity);已创建 1 行。SQL> commit;提交完成。SQL> insert into binary_test(bin_float,bin_double)
2 values(binary_float_nan,binary_double_nan);已创建 1 行。SQL> commit;提交完成。SQL> select * from binary_test; BIN_FLOAT BIN_DOUBLE
---------- ----------
3.95E+001 1.57E+001
Inf Inf
Nan NanSQL> select * from binary_test where bin_float is NAN; BIN_FLOAT BIN_DOUBLE
---------- ----------
Nan NanSQL>
2 (bin_float binary_float,
3 bin_double binary_double)
4 /
Table created
SQL>
SQL> insert into binary_test(
2 bin_float,bin_double)
3 values(39.5f,15.7d)
4 /
1 row inserted
SQL>
SQL> insert into binary_test(bin_float,bin_double)
2 values(binary_float_infinity,binary_double_infinity);
1 row inserted
SQL> commit
2 /
Commit complete
SQL> select * from binary_test
2 /
BIN_FLOAT BIN_DOUBLE
---------- ----------
39.5 15.7
1E126 1E126
SQL>
SQL> insert into binary_test(bin_float,bin_double)
2 values(binary_float_nan,binary_double_nan)
3 /
1 row inserted
SQL> commit
2 /
Commit complete
SQL> select * from binary_test
2 /
select * from binary_test
ORA-01722: 无效数字
SQL> select count(*) from binary_test
2 /
COUNT(*)
----------
3
SQL> --sqlplus 下则可以 是的如楼上说 的
scott@ORCL> select * from binary_test
2 / BIN_FLOAT BIN_DOUBLE
---------- ----------
3.95E+001 1.57E+001
Inf Inf
Nan Nan
--原来是pl/sql developer的问题!