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冲天: 你自己翻译一遍会得到很多,找别人帮你翻译出来最终你还是不会,不懂的函数百度
@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 || ', ';
这一段卡住了
@一v冲天:
:=是赋值
||是连接字符串,相当于字符串的+号
你要学会的是decode的用法
http://www.cnblogs.com/juddhu/archive/2012/03/07/2383101.html
@Rich.T: - -那你帮我搞搞呗,说多不如练,我一直在搞,没搞出来,才请教网上的大神
@一v冲天: 我不赞同拿来主义
@Rich.T: 厄 我每次都感觉看别人的源码学东西比较快。 如果是学生的话有时间慢慢琢磨,一般工作上要求快速入手,快速学会,结果比过程重要。 一般都是有任务了自己想,想不出来就找其他人的Demo,然后忙过这一阵再慢慢琢磨。
@一v冲天: 我觉得吧,不用纠结于翻译代码。可以把ora的当做伪代码,看懂代码是干什么的,有什么作用。然后自己写sql的。