zl程序教程

您现在的位置是:首页 >  数据库

当前栏目

oracle字符串转成行

Oracle 字符串
2023-06-13 09:14:10 时间
SELECT  SUBSTR(T.RPT_ID,
               INSTR(T.RPT_ID,",",1,C.LV)+1,
               INSTR(T.RPT_ID,",",1,C.LV+1)-(INSTR(T.RPT_ID,",",1,C.LV)+1))
           ASRPT_ID
 FROM  (SELECT","||"85,86,87"||","RPT_ID,
                LENGTH("85,86,87"||",")-NVL(LENGTH(REPLACE("85,86",",")),0)CNT
           FROMDUAL)t,
        (SELECTLEVELlv
           FROMDUAL
         CONNECTBYLEVEL<=LENGTH("85,86,87"||",")-NVL(LENGTH(REPLACE("85,86,87",",")),0))c
 WHERE  T.cnt>=c.lv
说明:CNT表示串里面有多少字符。
当是字符串是表中的字段时,取level<=最大个数
如:
1).取最大个数
SELECTMAX(LENGTH(RPT_ID||",")-
           NVL(LENGTH(REPLACE(RPT_ID,",")),0))INTOv_c
   FROMDIM_AUDIT_TABLE@sjmh_inter;
2).l转成行
SELECTT.T_NAME,
                      T.T_NAME_COMM,
                      T.T_COLUMN,
                      T.T_COLUMN_COMM,
                      t.COMMENT_NL,
                      t.COMMENT_NL_TIME,
                      t.SEQ_USER_ID,
                      SUBSTR(T.RPT_ID,
                             INSTR(T.RPT_ID,"","",1,C.LV)+1,
                             INSTR(T.RPT_ID,"","",1,C.LV+1)-
                             (INSTR(T.RPT_ID,"","",1,C.LV)+1))ASRPT_ID
                 FROM(SELECTA.T_NAME,
                              A.T_NAME_COMM,
                              A.T_COLUMN,
                              A.T_COLUMN_COMM,
                              a.COMMENT_NL,
                              a.COMMENT_NL_TIME,
                              a.SEQ_USER_ID,
                              "",""||A.RPT_ID||"",""RPT_ID,
                              LENGTH(A.RPT_ID||"","")-
                              NVL(LENGTH(REPLACE(A.RPT_ID,"","")),0)CNT
                         FROMDIM_AUDIT_TABLE@sjmh_interA
                        WHEREa.COMMENT_NLisnotnull)T,
                      (SELECTLEVELLVFROMDUALCONNECTBYLEVEL<="||v_c||")C
                WHEREC.LV<=T.CNT;

注:如果是上面代码是远程的代码,(SELECTLEVELLVFROMDUALCONNECTBYLEVEL<="||v_c||")C,不要用dual表,可以改用all_objects或user_objects,要不然能查询,但是把查询出来的SQL插入到某个表时,只能插入一行