Monthly Archives: August 2008

Oracle中”竟然是NULL

一直以为在SQL中NULL和”是两个东西,但在Oracle中就有点特殊了,看下面的例子:select count(*) from ( select ” as f1 from dual) where f1 = ” 运行结果为0 select count(*) from ( select ” as f1 from dual) where f1 is null 运行结果为1

SQLLDR的几个常用参数

CTL文件: 1. 字段值指定为常量: ENABLE_FLAG CONSTANT ‘Y’ 2. 字段格式为日期类型: MONITOR_DATE DATE “YYYY-MM-DD” 3. 数据文件中某列不导入: PRODUCT_ORDER FILLER 4. 字段的值来自序列: SWAP_ID “SEQ_BASE_MATERIELSWAPINFO.NEXTVAL” 注意: 当PAR文件中指定DIRECT=TRUE时,字段的值无法从序列中获取,出现错误:ORA-01400: cannot insert NULL into (SERV_DOC_PRODUCT_ID) PAR文件: 1. DIRECT=TRUE可以提高导入速度,但我在导入数据发现使用这个选项表的触发器被禁用了,而且当主键冲突的时候仍然可以导入,但导入后表只能查询,无法更新和删除数据,需要DROP并重建主键和索引。 参考文档: Oracle 的SQL*LOADER sqlldr总结参数介绍

学习Oracle中读取树查询的语法

select … from tablename where cond3 start with cond1 connect by cond2 从根节点遍历:connect by prior id = parent_id 从子节点遍历:connect by prior parent_id = id 子节点排序: ORDER SIBLINGS BY , only for 10g LEVEL(层数), CONNECT_BY_ISLEAF(是否叶子节点)是两个有用的伪列 2011-01-09 PS: sys_connect_by_path这个函数也比较有用,可以生成节点的全路径 2011-01-24 ps: 使用CONNECT_BY_ROOT的一个例子:利用Oracle的新特性优化SQL 查看Javaeye中的两个帖子: 对于oracle进行简单树查询(递归查询) 用select 语句中的START WITH…CONNECT BY PRIOR子句实现递归查询 ITPUB的帖子: start with … connect by用法简介 sql有向图问题期待新解决方案