哪位大侠能帮忙将以下oracle的存储过程转为MySQL的存储过程,谢谢!create or replace PROCEDURE PRO_POI_TYPE_USE_TAB AS
v_CITY_ID varchar2(100);
v_ADMIN_TAB varchar2(100);
v_TYPE_USE number;
v_Sql_Select   varchar2(500);
v_Sql_Create   varchar2(500);
TYPE T_CUR IS REF CURSOR;           
cur_poi_type T_CUR;CURSOR cur_poi_name IS
SELECT CITY_ID,POI_ADMIN_TAB
  FROM POI_ADMIN_DEFINE where substr(CITY_ID,3,2) <> 00;BEGIN   FOR recode_POI_NAME IN cur_poi_name LOOP
v_CITY_ID := recode_POI_NAME.CITY_ID;
v_ADMIN_TAB := recode_POI_NAME.POI_ADMIN_TAB;        --找出各市POI_TYPE_USE的值
        v_Sql_Select := 'select distinct poi_type_use from '|| v_ADMIN_TAB ||' where poi_type_use is not null order by poi_type_use ';
        OPEN cur_poi_type FOR v_Sql_Select;
        LOOP       
            FETCH cur_poi_type INTO v_TYPE_USE;
            EXIT WHEN cur_poi_type%NOTFOUND;                 --未查到数据退出
            --DBMS_OUTPUT.PUT_LINE(v_TYPE_USE);
          
            --创建各市POI_TYPE_USE表
            v_Sql_Create := 'create table '||v_ADMIN_TAB||'_IDX_TYPE_USE'||v_TYPE_USE||' as select * from '|| v_ADMIN_TAB ||' where poi_type_use = '|| v_TYPE_USE ||' order by display desc ';
            --dbms_output.put_line(v_Sql_Create);
            execute immediate v_Sql_Create; 
        END LOOP;
        CLOSE cur_poi_type;
   END LOOP;
   
END;

解决方案 »

  1.   

    才一个喊吧MSSQL过程转Oracle 写的我痛,语法好多都不一样!
      

  2.   

    你不是已经自己改得差不多了。关于CURSOR嵌套, 你可以参考下面的例子。delimiter //
    create procedure x ()
    begin
    declare a,b,c,d int;
    declare done int default 0;

    DECLARE cur1 CURSOR FOR SELECT id FROM t1 where id<5;
    DECLARE cur2 CURSOR FOR SELECT id,f1 FROM t2 where id=a;
    DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1;

    OPEN cur1;
    WHILE done=0 DO
    FETCH cur1 INTO a;
    OPEN cur2;
    FETCH cur2 INTO b,c;
    CLOSE cur2;
    select a,b,c;
    END WHILE;
    CLOSE cur1;
    end//
    delimiter ;