参考:
create or replace procedure SP_CR(V_WLBMC IN STRING,V_LJBMC IN STRING) IS   TYPE c_curtype IS REF CURSOR;
   c_cur c_curtype;
   str STRING(2000):='';
   v_tname col.tname%TYPE;
   v_cname col.cname%TYPE;
   v_coltype col.coltype%TYPE;
   v_type t_zdb.lx%TYPE;
BEGIN
   str:='delete from t_zdb where wlbmc='''||v_wlbmc||'''';
   EXECUTE IMMEDIATE str;
   str:='delete from t_sjb where wlbmc='''||v_wlbmc||'''';
   EXECUTE IMMEDIATE str;
   str:='insert into t_sjb(wlbmc,ljbmc,cxbs,gbbs)VALUES'||
                            '('''||v_wlbmc||''','''||TRIM(v_ljbmc)||''',''Y'',''N'')';
   EXECUTE IMMEDIATE str;
   OPEN c_cur FOR SELECT tname,cname,coltype FROM col WHERE tname=''||V_WLBMC||'';
   LOOP
       FETCH c_cur INTO v_tname,v_cname,v_coltype;
       EXIT WHEN c_cur%NOTFOUND;
          v_type:=v_coltype;
          IF TRIM(v_coltype)='CHAR' OR TRIM(v_coltype)='VARCHAR2' THEN 
              v_type:='STRING';
          ELSIF TRIM(v_coltype)='FLOAT' OR TRIM(v_coltype)='LONG' OR TRIM(v_coltype)='NUMBER' THEN 
              v_type:='NUMBER';
          ELSIF TRIM(v_coltype)='DATE' THEN 
              v_type:='DATE';
          END IF;
          str:='insert into t_zdb(wlbmc,wlzdm,sfcxx,lx,qzfs,ljzdm)values('''||v_tname||''','''||v_cname||''','||
               '''Y'','''||v_type||''',''²éѯ'',''ll'')';
          EXECUTE IMMEDIATE str;          
   END LOOP;
   CLOSE c_cur;
   COMMIT;
   
   EXCEPTION
      WHEN OTHERS THEN 
          ROLLBACK;
          RAISE;
end SP_CR;
/