SQL Cursor在Oracle

时间:2016-07-09 14:58:00

标签: sql oracle cursor

我有下表TTC_CHILD

child_id Field_Name Sequence
1        Test       E,B
2        alpha      C,A,X

我有另一张桌子

TTC_CHILD_EXTRACT

Field_id Field_Name Sequence
 1       Test1        E
 2       Test2        Y
 3       Test3        B
 4       Test7        E
 5       Test8        Z
 6       Test9        B

TTC_CHILD_EXTRACT只有一个序列(不是以逗号分隔)。我想在第3个表ttc_field中插入field_id,其中field_name将使用like运算符插入(如'Test%',如'alpha%'),序列应在运算符中使用(在'E','B'),即

TTC_FIELD应具有上述样本行的以下数据

 S.No. Child_id Field_id
  1      1        1
  2      1        3
  3      1        4
  4      1        6

因为Test只存在于序列E和B中。我想过使用游标

DECLARE
     CURSOR TTC_CHILD_CURSOR IS
    SELECT CHILD_ID, FIELD_NAME,SEQUENCE FROM TTC_CHILD;

BEGIN
  FOR child IN TTC_CHILD_CURSOR LOOP
// here I want to loop the ttc_child table one by one and get the field id     from ttc_child_extract and insert that in TTC_Field       



END LOOP;

COMMIT;
END;

1 个答案:

答案 0 :(得分:0)

尝试:

select rownum as "S.No", c.child_id, e.field_id
from TTC_CHILD c
join TTC_CHILD_EXTRACT e
on c.sequence like e.sequence || ',%'
   or c.sequence like '%,' || e.sequence || ',%'
   or c.sequence like '%,' || e.sequence 
   or c.sequence like e.sequence 

注意:此查询可能会很慢,并且由于缺少规范化(数据存储为逗号分隔文本),您几乎无法采取任何措施来加快此查询速度。
唯一合理的方法是规范化表格。