CREATE OR REPLACE PROCEDURE "TUBEMNG"."RE" (one OUT INTEGER,two OUT INTEGER,three OUT INTEGER,four OUT INTEGER,ptype IN VARCHAR2,DRAWNO IN VARCHAR2,MSIZE IN VARCHAR2) AS TYPE name_num_rc IS REF CURSOR; cv name_num_rc; dynal_sql VARCHAR2(500); NUM INTEGER; IN_TIME DATE; BEGIN one:= 0; four:= 0; three:=0; two:=0; dynal_sql:='SELECT ST.IN_TIME,TU.NUM FROM TB_DM_ML_STOCK st INNER JOIN TB_DM_TUBE tu ON ST.TU_ID=TU.TU_ID WHERE 1=1'; --dbms_output.put_line(ptype); --机型 IF ptype IS NOT NULL THEN dynal_sql:=dynal_sql || ' AND TU.P_TYPE=''' ; dynal_sql:= dynal_sql || ptype || ''''; --dbms_output.put_line(dynal_sql); END IF; --零件图号 IF DRAWNO IS NOT NULL THEN dynal_sql:=dynal_sql || ' AND TU.DRAW_NO=''' ; dynal_sql:= dynal_sql || DRAWNO || ''''; --dbms_output.put_line(dynal_sql); END IF; --尺寸 IF MSIZE IS NOT NULL THEN dynal_sql:=dynal_sql || ' AND TU.M_SIZE=''' ; dynal_sql:= dynal_sql || MSIZE || ''''; --dbms_output.put_line(dynal_sql); END IF; OPEN cv FOR dynal_sql; FETCH cv INTO IN_TIME,NUM; WHILE CV%FOUND LOOP --根据上一次取到的值进行操作 IF IN_TIME IS NOT NULL THEN IF ADD_MONTHS(IN_TIME, 1)> SYSDATE THEN--一个月以内的记录 one:=one+NUM; ELSIF ADD_MONTHS(IN_TIME, 3)> SYSDATE THEN --1-3个月滞留时间 two:=two+NUM; ELSIF ADD_MONTHS(IN_TIME, 6)> SYSDATE THEN --3-6个月滞留时间 three:=three+NUM; ELSE--3-6个月滞留时间 four:=four+NUM;--半年以上滞留记录 END IF; END IF; --再一次取值 FETCH cv INTO IN_TIME,NUM; END LOOP; --FETCH cv into NAMES; -- routine body goes here, e.g. -- DBMS_OUTPUT.PUT_LINE('Navicat for Oracle'); --INSERT INTO WX_MENU(ID,NAME) VALUES('1122623212','12123'); CLOSE cv; END;
oracle存储过程,动态sql
猜你喜欢
转载自blog.csdn.net/qq_33888187/article/details/80514172
今日推荐
周排行