日期:2014-05-17  浏览次数:20846 次

存储过程Split的问题
begin

--获取所有接收人GUID
         SELECT * INTO V_DEALERGUID  from table(FT_SPLIT(V_WORKORDERCYCLE.F_DEALER_IDS,','));
end

说明:这是我在存储过程begin end模块中加的代码 ,我想把一个字符串(V_WORKORDERCYCLE.F_DEALER_IDS loop里面循环获取的,这是一个很长的GUIDS字符串)Split掉,然后想获取这个集合里面的所有数据,然后进行循环insert到一张表。

我想问的是:查询结果放到V_DEALERGUIDS 里面,这个 V_DEALERGUIDS 变量怎么申明,怎么循环这个集合,小弟是第一次接触这些东西,请各位大哥多多帮助下,谢谢了
------最佳解决方案--------------------
用游标,很简单,给你例子。

PROCEDURE find_staff
is

  -- 声明一个游标,查询表
  CURSOR c1 IS
  SELECT empno, ename FROM emp ;
BEGIN
  --游标循环,通过ee变量获取记录的,如ee.empno,ee.ename
  FOR ee IN c1 LOOP
  --循环调用insert into 。  
     insert into ttt values(ee.empno,ee.ename);
  END LOOP;
  COMMIT;
END;
------其他解决方案--------------------
游标可以传参数的。如
CURSOR c1(name) IS
SELECT empno, ename FROM emp where ename=name

使用时,传入参数,如
FOR ee IN c1('hh') LOOP
------其他解决方案--------------------
引用:
begin

--获取所有接收人GUID
  SELECT * INTO V_DEALERGUID from table(FT_SPLIT(V_WORKORDERCYCLE.F_DEALER_IDS,','));
end

说明:这是我在存储过程begin end模块中加的代码 ,我想把一个字符串(V_WORKORDERCYCLE.F_DEALER_IDS loop里面循环获取的,这是……

JUST LIKE THIS。
TYPE fieldType IS TABLE OF VARCHAR2(500) INDEX BY BINARY_INTEGER;
  V_DEALERGUID fieldType;
begin

--获取所有接收人GUID
  SELECT * BULK COLLECT INTO V_DEALERGUID from table(FT_SPLIT(V_WORKORDERCYCLE.F_DEALER_IDS,','));
end;


------其他解决方案--------------------
引用:
用游标,很简单,给你例子。

PROCEDURE find_staff
is

  -- 声明一个游标,查询表
  CURSOR c1 IS
  SELECT empno, ename FROM emp ;
BEGIN
  --游标循环,通过ee变量获取记录的,如ee.empno,ee.ename
  FOR ee IN c1 LOOP
  --循环调用insert into……
 我用游标 我怎么把我那个字符串参数传进去?