以上是SQL-SERVER代码,用ORACLE如何写?

解决方案 »

  1.   

    PL/SQL
    -----------------------------------
    --过程名称:SP_GETylbxdjzh  
    --过程功能: 获得ylbxdjzh
    --入口参数: 调用类型
    --创建作者: hewei2003
    --创建时间: 2004-04-25
    -----------------------------------create or replace procedure SP_GETylbxdjzh(TYPE in int) is
      ybylbxdjh VARCHAR(15);
      jfdwmc VARCHAR(50);
      NUM INT; --ybylbxdjh已用次数
      FLAG INT; --tsdwbz
      STATE INT;  --ybylbxdjh状态:1,只有普通单位;2,只有特殊群体;
    --3,已有普通单位和特殊群体;4,没有普通单位和特殊群体
      NEEDED INT;  --需要输出的
      PICTYPE INT;  --ICO_TYPE
      ybzt INT;
      
      i number;  --定义游标
      Cursor MYCUR is SELECT YB_CBDW_BXDJ.ybylbxdjh,jfdwmc,nvl(TT.NUM,0) AS NUM,TT.FLAG 
    FROM YB_CBDW_BXDJ LEFT OUTER JOIN
    (SELECT ybylbxdjh,COUNT(tsdwbz) AS NUM,MAX(tsdwbz) AS FLAG 
    FROM YB_DWDA GROUP BY ybylbxdjh) AS TT
    ON YB_CBDW_BXDJ.ybylbxdjh = TT.ybylbxdjh
    ORDER BY YB_CBDW_BXDJ.ybylbxdjh
    begin  --创建表
      execute immediate 'CREATE TABLE #T (ybylbxdjh VARCHAR(15),jfdwmc VARCHAR(50),ICO_TYPE int)';
      
      --打开游标进行处理
      for i in MYCUR--变量i表示的是记录的一行,如果下面有引用错误的地方自己再改一下
      loop
        STATE := 0;
        NEEDED := 0;
        PICTYPE := 0;
        IF i.NUM <  1 then
          STATE := 4;
        ELSIF i.NUM = 1 then
          STATE := i.FLAG;  --(1 OR 2)
        ELSE
          STATE := 3;
        end if;
        ---------------------------------------------
        IF STATE = 1 then --1,只有普通的
          IF TYPE = 0 then
            NEEDED := 1;
            PICTYPE := 2;
          end if;      IF TYPE = 1 then
            SELECT ybzt into ybzt FROM YB_DWDA WHERE ybylbxdjh = i.ybylbxdjh;
    IF ybzt < 4 then
      NEEDED := 1;
      PICTYPE := 2;
    ELSE
        NEEDED := 0;
      PICTYPE := 0;
          end if;
          
          IF TYPE = 2 then
      NEEDED := 1;
      PICTYPE := 1;
          end if;       
        end if;
        ---------------------------------------------------
        中间这段的代码可以照着上面的改    ---------------------------------------------------
        --输出
        IF NEEDED = 1 then
          INSERT INTO #T VALUES (i.ybylbxdjh ,i.jfdwmc ,PICTYPE )
        end if;   end loop;
      
      execute immediate 'select * from #T';
      execute immediate 'drop table #T';
    end SP_GETylbxdjzh;My Email:[email protected]