1。CONNECT BY...START WITH..这个树状结构不是很懂,可以举个例子吗?
2。对动态也不是很懂,也能举个例子吗?
像 <dynamic>
      <isNotEqual property="...." compareValue="...">
    <isEqual prepend="AND" property="....."   compareValue="...">
     ....
    </isEqual>
     .....
     </isNotEqu>
    </dynamic>
 3.有时候 有A.* FROM 这种写法,好像是关于调用的,也可以举个例子吗?
谢谢各位大哥  急!!!!!

解决方案 »

  1.   

    请看范例:
    CREATE TABLE TBL_C(ID NUMBER, PARENTID NUMBER, LEV INTEGER);INSERT INTO TBL_C 
    SELECT 1683,1,1      FROM DUAL UNION ALL
    SELECT 1703,1683,2   FROM DUAL UNION ALL
    SELECT 1707,1683,2   FROM DUAL UNION ALL
    SELECT 1708,1683,2   FROM DUAL UNION ALL
    SELECT 5759,1683,2   FROM DUAL UNION ALL
    SELECT 7729,1683,2   FROM DUAL UNION ALL
    SELECT 7733,1683,2   FROM DUAL UNION ALL
    SELECT 7752,1683,2   FROM DUAL UNION ALL
    SELECT 1704,1703,3   FROM DUAL UNION ALL
    SELECT 1709,1708,3   FROM DUAL UNION ALL
    SELECT 7753,7729,3   FROM DUAL UNION ALL
    SELECT 7754,7752,3   FROM DUAL UNION ALL
    SELECT 1705,1704,4   FROM DUAL UNION ALL
    SELECT 5179,1709,4   FROM DUAL UNION ALL
    SELECT 5229,1709,4   FROM DUAL UNION ALL
    SELECT 1706,1705,5   FROM DUAL;
    SELECT *
    FROM TBL_C
    START WITH LEV = 1
    CONNECT BY PARENTID = PRIOR ID
    ORDER BY LEV;
      

  2.   

    1. 树结构的描述
    树结构的数据存放在表中,数据之间的层次关系即父子关系,通过表中的列与列间的关系来描述,如EMP表中的EMPNO和MGR。EMPNO表示该雇员的编号,MGR表示领导该雇员的人的编号,即子节点的MGR值等于父节点的EMPNO值。在表的每一行中都有一个表示父节点的MGR(除根节点外),通过每个节点的父节点,就可以确定整个树结构。
    在SELECT命令中使用CONNECT BY 和蔼START WITH 子句可以查询表中的树型结构关系。其命令格式如下:
    SELECT 
    CONNECT BY {PRIOR 列名1=列名2|列名1=PRIOR 裂名2}
    [START WITH];
    其中:CONNECT BY子句说明每行数据将是按层次顺序检索,并规定将表中的数据连入树型结构的关系中。PRIORY运算符必须放置在连接关系的两列中某一个的前面。对于节点间的父子关系,PRIOR运算符在一侧表示父节点,在另一侧表示子节点,从而确定查找树结构是的顺序是自顶向下还是自底向上。在连接关系中,除了可以使用列名外,还允许使用列表达式。START WITH 子句为可选项,用来标识哪个节点作为查找树型结构的根节点。若该子句被省略,则表示所有满足查询条件的行作为根节点。
    例1 以树结构方式显示EMP表的数据。
    SQL> SELECT EMPNO,ENAME,MGR
          FROM EMP
          CONNECT BY PRIOR EMPNO=MGR
          START WITH ENAME=’KING’;
    EMPNO ENAME MGR
    7839 KING
    7566 JONES 7839
    7788 SCOTT 7566
    7876 ADAMS 7788
    7902 FORD 7566
    7369 SMITH 7902
    7698 BLAKE 7839
    7499 ALLEN 7698
    7521 WARD 7698
    7654 MARTIN 7698
    7844 TURNER 7698
    7900 JAMES 7698
    7782 CLARK 7839
    7934 MILLER 7782
    14 rows selected.
      

  3.   

    2.动态SQL
      从我的理解来说,动态SQL主要用来解决非固定条件的SQL语句,比如
      1.帮定变量使用的时候;
      2.批量处理的时候
      3.SQL语句的执行条件是以参数方式传入的
      等等SQL> select * from t_where;        ID SELECT_ORDER SIGN                 ERR_TYPE             SELECT_WHERE
    ---------- ------------ -------------------- -------------------- --------------------------------------------------------------------------------
           100            1 ORA                  警告                 MESSAGE LIKE '****'
           200            2 ORA                  错误                 CODE = 600
           300            3 ORA                  警告                 CODE = 1555
           400            4 ORA                  情报                 MESSAGE LIKE '%******%'
           500            5 ORA                  错误                 MESSAGE LIKE '%err%'SQL> select * from t_oracle;       SEQ MACHINE_ID           CODE                 MESSAGE              FLAG
    ---------- -------------------- -------------------- -------------------- ----------
            11 1000                 600                  err1                 未処理
            12 1000                 1555                                      未処理
            13 2000                 600                  err2                 未処理
            14 2000                 1                                         処理完
            15 2000                 12153                                     未処理
    ----以上为基础表数据--一下为处理过程
    create or replace procedure pro_test
    as
        cursor get_where is 
        select * from t_where ;
        row_where t_where%rowtype; 
        sql_str    varchar2(2000);
        row_oracle t_oracle%rowtype;
    begin 
        open get_where;
       loop
          fetch get_where into row_where;
          exit when get_where%notfound;
          --获取动态游标
          sql_str:='
          declare 
          begin 
          for rc in ( select * from t_oracle where '||' '||row_where.select_where||' ) 
          loop
                insert into result_tab values (rc.seq,rc.machine_id,'||            ''''||row_where.sign||''''||','||row_where.id||','||''''||
                row_where.err_type||''''||','||row_where.select_order||' );
          end loop; 
          end ;';
       execute immediate sql_str;
       end loop;
       close get_where;
    end;
    /--测试及查看
    create table result_tab( seq number,machine_id varchar2(20),sign varchar2(20),id number,err_type varchar2(20),select_order number);
    SQL> select * from result_tab;       SEQ MACHINE_ID SIGN               ID ERR_TYPE             SELECT_ORDER
    ---------- ---------- ---------- ---------- -------------------- ------------SQL> exec pro_test ;PL/SQL procedure successfully completedSQL> select * from result_tab;       SEQ MACHINE_ID SIGN               ID ERR_TYPE             SELECT_ORDER
    ---------- ---------- ---------- ---------- -------------------- ------------
            11 1000       ORA               200 错误                            2
            13 2000       ORA               200 错误                            2
            12 1000       ORA               300 警告                            3
            11 1000       ORA               500 错误                            5
            13 2000       ORA               500 错误                            5  
      

  4.   

    3.使用A.*表明的是查询A表的所有栏位,一般用在多表关联查询的时候for example :
       select A.* from table_1 A,table_2 B
       where a.id = b.id
      

  5.   

    死包子,你就不能少发点吗?
    MD,看到个MM这么来劲.
      

  6.   

    哈哈 DragonBill你咋这么生气呢:)可能是应为MM吧 所以我比较卖力点,DragonBill你体谅则个