今天折腾了3个小时,为一个以前不知道的oracle函数机制: 在sql查询中,如果一个查询未能获取记录,oracle不会报错 如select aa from bb where 1=2; 但在oracle函数中,如果是赋值语句,就会报错ORA-01403: no data found 数据未找到 如select aa into kk from bb where 1=2; 今天的错误就在这里,主要是弄混了字段null和记录为空的null,而且是在递归调用中,sql的断点调试其实是直接进入了最后一层递…
背景:  A表.B表两表关联,关联出来的结果里B表有不止一条,需求是只要B表结果中的某一条(按某字段排序) 首先想到了直接写个带排序的子查询去匹配外围的值,从这个结果集中只要第一条,但是经过验证发现,里边的条件是获取不到外层的值的,因此此方案不可行. 经过百度,发现 row_number() over函数可用,以下是数据环境及结果. 创建数据环境 )); insert into A values('alan'); insert into A values('Alee'); insert into…
一直以来有一个困惑,一直没解决,昨天一哥们问我这个问题,决心弄清楚,终于得到了答案.先看下面这个函数: create or replace function fn_test(c_xm varchar) return varchar2 as V_P1 ); begin ;--将name查出赋值给v_p1 return 'test' || c_xm; end; 这个函数很简单,是我写的一个测试函数,没什么意义,“select name into V_p1 from t1 where 1 = 2;”这…
一直以来有一个困惑,一直没解决,昨天一哥们问我这个问题,决心弄清楚,终于得到了答案.先看下面这个函数: create or replace function fn_test(c_xm varchar) return varchar2 as V_P1 varchar(10); begin select name into V_p1 from t1 where 1 = 2;--将name查出赋值给v_p1 return 'test' || c_xm; end; 这个函数很简单,是我写的一个测试函数,…
函数: 1 create or replace function fn_test(tablename in varchar2) return number is sqls ); rtn ):; begin --获取学生表的记录条数 --select count(*) into rtn from student; sqls:='select count(*) from ' || tablename; execute immediate sqls into rtn; dbms_output.put_…
lead,lag函数的分析 http://blog.csdn.net/mazongqiang/article/details/7621328 举例如下: SQL> select *  from kkk;                                                                                                                    ID NAME                          …
现在存在以下数据: 需要查询出以下数据 姓名       日期 张三       2017-12-14 李四       2017-12-16 在E1中写入以下公式:=IF(D2=MAX(IF($C$2:$C$7=C2,$D$2:$D$7)),MAX(IF($C$2:$C$7=C2,$D$2:$D$7)),"") 然后CTRL+Shift+ENTER,接着下拉填充即可…
XT_RSGL_KQSZ_LS表结构如下图: CREATE TABLE  XT_RSGL_KQSZ_LS( KQFW VARCHAR(400) ) 其中KQFW字段以分割符 , 隔开 INSERT INTO XT_RSGL_KQSZ_LS SELECT 'AAA,BBBB,C' UNION SELECT '12,3' 实现的结果为 (number为前分隔符的下标值的后一位) select substring(a.kqfw , b.number , charindex(',',a.kqfw+','…
在调用Oracle函数时为了让PL/SQL 函数返回数据的多个行,必须通过返回一个 REF CURSOR 或一个数据集合来完成.REF CURSOR 的这种情况局限于可以从查询中选择的数据,而整个集合在可以返回前,必须进行具体化. 9i 通过引入Oracle函数中的管道化表函数纠正了后一种情况.表函数是返回整个行的集(通常作为一个集合)的函数,可以直接从 SQL 语句中进行查询,就好像它是一个真正的数据库表一样.管道化表函数与之相似,但是它像在构建时一样返回数据,而不是一次全部返回.管道化表函数…
chartorowid(c1) [功能]转换varchar2类型为rowid值 [参数]c1,字符串,长度为18的字符串,字符串必须符合rowid格式 [返回]返回rowid值 [示例] SELECT chartorowid('AAAADeAABAAAAZSAAA') FROM DUAL; [说明] 在Oracle中,每一条记录都有一个rowid,rowid在整个数据库中是唯一的,rowid确定了每条记录是在Oracle中的哪一个数据文件.块.行上. 在重复的记录中,可能所有列的内容都相同,但r…