首页 新闻 会员 周边

oracle函数转mysql函数

0
悬赏园豆:100 [已关闭问题] 关闭于 2016-03-29 11:04

FUNCTION createRotationStatement(p_project IN varchar2 DEFAULT NULL,
                                   p_whse    IN varchar2 DEFAULT NULL,
                                   p_ower    IN varchar2 DEFAULT NULL,
                                   p_outbkey IN varchar2 DEFAULT NULL,
                                   p_rowno   IN varchar2 DEFAULT NULL
                                   )
 
   RETURN varchar2 IS
    v_orderClause varchar2(32767) := NULL;
 
  BEGIN
 
    r_orderRoute := getRoute(p_project, p_whse, p_ower, p_outbkey, p_rowno);
            
    IF (r_orderRoute.e_skurotation1 IS NOT NULL) AND
       (r_orderRoute.e_rotation1 IS NOT NULL) THEN
     
      IF r_orderRoute.e_rotation1 = 'LIFO' THEN
        r_orderRoute.e_rotation1 := 'DESC';
      ELSE
        r_orderRoute.e_rotation1 := 'ASC';
      END IF;
      --                v_orderClause := v_orderClause||' DECODE(UPPER('''||r_orderRoute.e_skurotation1||'''),''LOT'',le.lot,le.'||r_orderRoute.e_skurotation1||') '||r_orderRoute.e_rotation1||', ';
      v_orderClause := v_orderClause || ' DECODE(UPPER(''' ||
                       r_orderRoute.e_skurotation1 || '''),''LOT'',le.lot,
            ''LOT08'',TO_CHAR(le.LOT08,''yyyy-mm-dd''),
            ''LOT09'',TO_CHAR(le.LOT09,''yyyy-mm-dd''),
            ''LOT10'',TO_CHAR(le.LOT10,''yyyy-mm-dd''),
            ''LOT16'',TO_CHAR(le.LOT16,''yyyy-mm-dd''),
            ''REC_DATE'',TO_CHAR(inv.REC_DATE,''yyyy-mm-dd''),
            le.LOT) ' || r_orderRoute.e_rotation1 || ', ';
    END IF;
 
                
    IF (r_orderRoute.e_skurotation2 IS NOT NULL) AND
       (r_orderRoute.e_rotation2 IS NOT NULL) THEN
     
      IF r_orderRoute.e_rotation2 = 'LIFO' THEN
        r_orderRoute.e_rotation2 := 'DESC';
      ELSE
        r_orderRoute.e_rotation2 := 'ASC';
      END IF;
      --                v_orderClause := v_orderClause||' DECODE(UPPER('''||r_orderRoute.e_skurotation2||'''),''LOT'',le.lot,le.'||r_orderRoute.e_skurotation2||') '||r_orderRoute.e_rotation2||', ';
      v_orderClause := v_orderClause || ' DECODE(UPPER(''' ||
                       r_orderRoute.e_skurotation2 || '''),''LOT'',le.lot,
            ''LOT08'',TO_CHAR(le.LOT08,''yyyy-mm-dd''),
            ''LOT09'',TO_CHAR(le.LOT09,''yyyy-mm-dd''),
            ''LOT10'',TO_CHAR(le.LOT10,''yyyy-mm-dd''),
            ''LOT16'',TO_CHAR(le.LOT16,''yyyy-mm-dd''),
            ''REC_DATE'',TO_CHAR(inv.REC_DATE,''yyyy-mm-dd''),
            le.LOT) ' || r_orderRoute.e_rotation2 || ', ';
    END IF;
 
                
    IF (r_orderRoute.e_skurotation3 IS NOT NULL) AND
       (r_orderRoute.e_rotation3 IS NOT NULL) THEN
     
      IF r_orderRoute.e_rotation3 = 'LIFO' THEN
        r_orderRoute.e_rotation3 := 'DESC';
      ELSE
        r_orderRoute.e_rotation3 := 'ASC';
      END IF;
      --                v_orderClause := v_orderClause||' DECODE(UPPER('''||r_orderRoute.e_skurotation3||'''),''LOT'',le.lot,le.'||r_orderRoute.e_skurotation3||') '||r_orderRoute.e_rotation3||', ';
      v_orderClause := v_orderClause || ' DECODE(UPPER(''' ||
                       r_orderRoute.e_skurotation3 || '''),''LOT'',le.lot,
            ''LOT08'',TO_CHAR(le.LOT08,''yyyy-mm-dd''),
            ''LOT09'',TO_CHAR(le.LOT09,''yyyy-mm-dd''),
            ''LOT10'',TO_CHAR(le.LOT10,''yyyy-mm-dd''),
            ''LOT16'',TO_CHAR(le.LOT16,''yyyy-mm-dd''),
            ''REC_DATE'',TO_CHAR(inv.REC_DATE,''yyyy-mm-dd''),
            le.LOT) ' || r_orderRoute.e_rotation3 || ', ';
    END IF;
 
    DBMS_OUTPUT.PUT_LINE('YYYYY:' || v_orderClause);
 
    RETURN SUBSTR(TRIM(v_orderClause), 1, LENGTH(TRIM(v_orderClause)) - 1);
 
  END createRotationStatement;

一v冲天的主页 一v冲天 | 初学一级 | 园豆:106
提问于:2016-03-25 10:33
< >
分享
所有回答(1)
0

你的意思是让人帮你把这段代码完整翻译过来?

Rich.T | 园豆:3440 (老鸟四级) | 2016-03-25 14:12

我翻译到一半卡住了,给点建议也行,有大神的帮我转转最好了,就是改改语义

支持(0) 反对(0) 一v冲天 | 园豆:106 (初学一级) | 2016-03-25 14:56

@一v冲天: 你自己翻译一遍会得到很多,找别人帮你翻译出来最终你还是不会,不懂的函数百度

支持(0) 反对(0) Rich.T | 园豆:3440 (老鸟四级) | 2016-03-25 14:57

@Rich.T: 我已经改了就是在v_orderClause := v_orderClause||' DECODE(UPPER('''||r_orderRoute.e_skurotation1||'''),''LOT'',le.lot,le.'||r_orderRoute.e_skurotation1||') '||r_orderRoute.e_rotation1||', ';
      v_orderClause := v_orderClause || ' DECODE(UPPER(''' ||
                       r_orderRoute.e_skurotation1 || '''),''LOT'',le.lot,
            ''LOT08'',TO_CHAR(le.LOT08,''yyyy-mm-dd''),
            ''LOT09'',TO_CHAR(le.LOT09,''yyyy-mm-dd''),
            ''LOT10'',TO_CHAR(le.LOT10,''yyyy-mm-dd''),
            ''LOT16'',TO_CHAR(le.LOT16,''yyyy-mm-dd''),
            ''REC_DATE'',TO_CHAR(inv.REC_DATE,''yyyy-mm-dd''),
            le.LOT) ' || r_orderRoute.e_rotation1 || ', ';

这一段卡住了

支持(0) 反对(0) 一v冲天 | 园豆:106 (初学一级) | 2016-03-25 15:02

@一v冲天: 

:=是赋值

||是连接字符串,相当于字符串的+号

你要学会的是decode的用法

http://www.cnblogs.com/juddhu/archive/2012/03/07/2383101.html

支持(0) 反对(0) Rich.T | 园豆:3440 (老鸟四级) | 2016-03-25 15:04

@Rich.T: - -那你帮我搞搞呗,说多不如练,我一直在搞,没搞出来,才请教网上的大神

支持(0) 反对(0) 一v冲天 | 园豆:106 (初学一级) | 2016-03-25 15:06

@一v冲天: 我不赞同拿来主义

支持(0) 反对(0) Rich.T | 园豆:3440 (老鸟四级) | 2016-03-25 15:08

@Rich.T: 厄  我每次都感觉看别人的源码学东西比较快。 如果是学生的话有时间慢慢琢磨,一般工作上要求快速入手,快速学会,结果比过程重要。 一般都是有任务了自己想,想不出来就找其他人的Demo,然后忙过这一阵再慢慢琢磨。

支持(0) 反对(0) 小刺猬001 | 园豆:660 (小虾三级) | 2016-03-28 09:56

@一v冲天: 我觉得吧,不用纠结于翻译代码。可以把ora的当做伪代码,看懂代码是干什么的,有什么作用。然后自己写sql的。

支持(0) 反对(0) 小刺猬001 | 园豆:660 (小虾三级) | 2016-03-28 09:58
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册