WHERE (DATESTART >= TO_DATE(SYSDATE,'AAAAAAAA')
这样不对吧,SYSDATE本来就是日期型的,为什么还要用to_date转换?
这样不对吧,SYSDATE本来就是日期型的,为什么还要用to_date转换?
解决方案 »
- 本地怎么连接服务器上的oracle数据库的?急急急急急
- oracle 9i安装在XP系统中出现 创建服务oracleMTSRecoveryService失败解决方法
- pl/sql启动问题,求解
- 在同一台服务器上发布oracle数据库和透明网关,无法同时启动两个监听
- VC搭建PRO*C开发环境的问题
- ORA-06550的问题,怎么解决
- 拉链表或是type2表脏数据修复问题
- ORA-12500 tns:监听程序无法启动专用服务器进程
- delphi 调用存储过程!!!急!!!
- 哪位能提供ORACLE 9i下载的网址。。。
- oracle工具——sqlldr讨论,在线等待
- 怎样将NT中SQL数据导入UNIX下ORACLE中
select to_date(sysdate,'yyyy-mm-dd') from dual
*
ERROR 位于第 1 行:
ORA-01861: 文字与格式字符串不匹配
如果有满足另外两个条件的纪录存在的话报告错误就是to_date的问题。说明:用TO_DATE(SYSDATE,'AAAAAAAA')的目的是引进明显的错误看系统如何处理
而原来的错误也是这里的只不过是不容易看出的
from all_objects
where OWNER = 'WINDOWS'
and CREATED > to_date('2002-2-2','aaaaa');
就是这样只要你的数据库中的对象没有属于WINDOWS的那么这句话就可以执行
去掉第一个条件的结果如下
1 select *
2 from all_objects
3* where CREATED > to_date('2002-2-2','aaaaa')
SQL> /
where CREATED > to_date('2002-2-2','aaaaa')
*
ERROR 在行 3:
ORA-01821: date format not recognized
你的“第一句还可以顺利执行”应为“第一句没有语法错”,还没有执行!
老兄我说的第一句是指:
select * from all_objects where OWNER = 'WINDOWS' and CREATED > to_date('2002-2-2','aaaaa');
第二句是指:
select * from all_objects where CREATED > to_date('2002-2-2','aaaaa');
第一句在sqlpus中确实可以执行因为我的数据库中没有满足OWNER = 'WINDOWS' 的对象,一旦把它该为有的就会报错,与第二句的错误一样。所以我得出的结论是系统在开始的时候只做语法检查,语法检查通过后开始执行,一旦遇到结果集为空的情况就停止并返回,对剩下的语句不执行。
但这也有问题:在本贴开始的时候我给出的语句有三个条件,其中不存在满足除时间外的两个条件的纪录,也就是说只执行两个条件后结果就为空就会返回,可不管对这三个条件怎样排序都不会报错。也就是说系统在执行查询是并不是按照用户给出的条件的顺序执行的。
这些都是我自己的推论,没有任何可靠的依据。所以我想请叫高手,希望给出一个合理的有依据的结论。重要的是依据。
你可以先在SQLPLUS下执行/oracle/rdbms/admin/utlxplan.sql存储过程,以得到PLAN_TABLE用来记录分析结果。之后执行:
EXPLAIN PLAN for
select *
from all_objects
where OWNER = 'WINDOWS'
and CREATED > to_date('2002-2-2','aaaaa');
select * from plan_table;
就可以看到oracle的分析和执行次序、结果了
我本地测试看到,在做完owner条件句之后,oracle不再做created句,所以不会报错!