有下面这样的表结构与数据,这是ORACLE中的user_source表,oracle是把store procedure的每一行,存在单独的一条数据,具体见下面的列表现在要查,某一个store procedure里面有没有存在:在loop块里再调用另一个cursor的情况
        type                  name      line    text
1 PACKAGE COMMON_FUNC 6 " type type_cursor IS REF CURSOR;
"
2 PACKAGE BODY COMMON_FUNC 383 "      end loop;
"
3 PACKAGE BODY COMMON_FUNC 25 " loop
"
4 PACKAGE BODY COMMON_FUNC 29 " END loop;
"
5 PACKAGE BODY COMMON_FUNC 39 "     cur_user type_cursor;
"
6 PACKAGE BODY COMMON_FUNC 63 " loop
"
7 PACKAGE BODY COMMON_FUNC 67 " END loop;
"
8 PACKAGE BODY COMMON_FUNC 77 "     cur_user type_cursor;
"
9 PACKAGE BODY COMMON_FUNC 96 " loop
"
10 PACKAGE BODY COMMON_FUNC 100 " END loop;
"
11 PACKAGE BODY COMMON_FUNC 111 "    cur_user type_cursor;
"
12 PACKAGE BODY COMMON_FUNC 150 "  loop
"
13 PACKAGE BODY COMMON_FUNC 154 "  END loop;
"
14 PACKAGE BODY COMMON_FUNC 165 "    cur_user type_cursor;
"
15 PACKAGE BODY COMMON_FUNC 204 "  loop
"
16 PACKAGE BODY COMMON_FUNC 208 "  END loop;
"
17 PACKAGE BODY COMMON_FUNC 217 "    cur_user type_cursor;
"
18 PACKAGE BODY COMMON_FUNC 233 "  loop
"
19 PACKAGE BODY COMMON_FUNC 237 "  END loop;
"
20 PACKAGE BODY COMMON_FUNC 248 "    cur_company type_cursor;
"
21 PACKAGE BODY COMMON_FUNC 289 "  loop
"
22 PACKAGE BODY COMMON_FUNC 293 "  END loop;
"
23 PACKAGE BODY COMMON_FUNC 301 "      cursor curs is
"
24 PACKAGE BODY COMMON_FUNC 305 "      FOR row_value in curs loop
"
25 PACKAGE BODY COMMON_FUNC 307 "    end loop;
"
26 PACKAGE BODY COMMON_FUNC 316 "      cur_company type_cursor;
"
27 PACKAGE BODY COMMON_FUNC 339 "    loop
"
28 PACKAGE BODY COMMON_FUNC 343 "    END loop;
"
29 PACKAGE BODY COMMON_FUNC 354 "      cursorDate date;
"
30 PACKAGE BODY COMMON_FUNC 357 "      cursorDate:=to_date(dateFrom,dateFormat);
"
31 PACKAGE BODY COMMON_FUNC 360 "      while (cursorDate<=endDate) loop
"
32 PACKAGE BODY COMMON_FUNC 361 "        pipe row(cursorDate);
"
33 PACKAGE BODY COMMON_FUNC 362 "          cursorDate:=cursorDate+ interval '1' month;
"
34 PACKAGE BODY COMMON_FUNC 363 "      end loop;
"
35 PACKAGE BODY COMMON_FUNC 365 "      if to_number(to_char(cursorDate,'mm')) between 1 and 3 then
"

解决方案 »

  1.   

    把存储过程的代码拿来看呗:SELECT DBMS_METADATA.GET_DDL('PROCEDURE','<PROCEDURE_NAME>','<PROCEDURE_OWNER>') FROM DUAL;
      

  2.   

    如何拿来看了就不用写SQL了,写SQL就是为了自动发现!如果一个系统有上百个sp每个都是很长的怎么一个个肉眼看啊!!
      

  3.   

    Oracle不会做这种不知所谓的事情,可以自己用getddl取到代码 自己去匹配里面有没有loop+cursor的特征关键字。