mysql与oracle遍历游标

MYSQL部分

CREATE DEFINER=`root`@`localhost` PROCEDURE `ProcedureTest`()
BEGIN
 DECLARE i int;
 -- 设置初始值,用于循环结束的判断依据
 DECLARE s int DEFAULT 0;
 DECLARE  GO_CARGO_ID1,GO_ORDER_ID1 LONG;
 DECLARE cus CURSOR FOR select a.GO_CARGO_ID,a.GO_ORDER_ID from go_cargo a;
  -- 这句话是用在while循环前的,如果游标到了最后就会将之前定义的s设置为1 ,直接拷贝进入就行
 DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET s=1; 

 set i = 0;
OPEN cus;
 
FETCH  cus INTO GO_CARGO_ID1,GO_ORDER_ID1; 
  WHILE s<>1 DO
		select GO_CARGO_ID1;
FETCH cus INTO GO_CARGO_ID1,GO_ORDER_ID1;
	
  END WHILE;

CLOSE cus;
END

ORACLE部分
1.案例一

CREATE OR REPLACE FUNCTION "BAFR_IMP_ADJUST_FUNC" (GO_ORDER_ID_IN IN NUMBER DEFAULT '-1')
RETURN VARCHAR2
AS
resultStr VARCHAR2(20):='';
BkFlag VARCHAR2(500):=''; 
BEGIN

FOR c IN ( SELECT SERVICE_CODE from "go_service_item" where GO_ORDER_ID = GO_ORDER_ID_IN ) LOOP
	
	CASE c.SERVICE_CODE
	WHEN 'BK' THEN
	BkFlag := CONCAT(BkFlag, 'BK');
	ELSE
			BkFlag := CONCAT(BkFlag, 'HASEXISTS');
END CASE;

	
END LOOP;

CASE 
	WHEN INSTR(BkFlag, 'BK') > 0 AND INSTR(BkFlag, 'HASEXISTS') <= 0 THEN
	resultStr := CONCAT(resultStr, 'Y');
	ELSE
		resultStr := CONCAT(resultStr, 'N');
END CASE;

	RETURN resultStr;
END;

2.案例二

CREATE OR REPLACE FUNCTION "BAFR_IMP_WHOLE_FUNC" (GO_ORDER_ID_IN IN NUMBER DEFAULT '-1')
RETURN VARCHAR2
AS
resultStr VARCHAR2(1000):='';
rebackStr VARCHAR2(20):='';
BEGIN

FOR c IN (SELECT SERVICE_CODE from "go_service_item" where GO_ORDER_ID = GO_ORDER_ID_IN) LOOP
resultStr := CONCAT('#', c.SERVICE_CODE);
END LOOP;

CASE 
	WHEN INSTR(resultStr, 'BK') > 0 AND  INSTR(resultStr, 'PKP') > 0 AND INSTR(resultStr, 'DLV') > 0 AND  INSTR(resultStr, 'CD') > 0 THEN
		rebackStr := CONCAT(rebackStr, 'Y');
	ELSE
		rebackStr := CONCAT(rebackStr, 'N');
END CASE;

	RETURN rebackStr;
END;

3.案例三

CREATE OR REPLACE FUNCTION "BAFR_MAIN_OPERATION_FUNC" (GO_ORDER_ID_IN IN NUMBER DEFAULT '-1')
RETURN VARCHAR2
AS
resultStr VARCHAR2(1000):='';
BEGIN
	FOR c IN ( select ITEM_CODE from "op_operation_item" where "op_operation_item".GO_ORDER_ID = GO_ORDER_ID_IN) LOOP
	
	CASE 
	WHEN INSTR(c.ITEM_CODE, 'LPC') > 0 THEN
	resultStr := CONCAT(resultStr, '0100#');
	WHEN INSTR(c.ITEM_CODE, 'UDP') > 0 OR INSTR(c.ITEM_CODE, 'AT') > 0  OR INSTR(c.ITEM_CODE, 'FT') > 0 THEN
		resultStr := CONCAT(resultStr, '0500#');
	WHEN INSTR(c.ITEM_CODE, 'AR') > 0 THEN
		resultStr := CONCAT(resultStr, '0200#');
	WHEN INSTR(c.ITEM_CODE, 'DP') > 0 THEN
		resultStr := CONCAT(resultStr, '0300#');
	WHEN INSTR(c.ITEM_CODE, 'CD') > 0 THEN
		resultStr := CONCAT(resultStr, '0400#');
	ELSE
		resultStr := CONCAT(resultStr, '');
END CASE;
	
END LOOP;


	RETURN resultStr;
END;

4.案例四

CREATE OR REPLACE FUNCTION "BRFR_BMS_SERV_SEGMENT_FUNC" (GO_ORDER_ID_IN IN NUMBER DEFAULT '-1')
RETURN VARCHAR2
AS
resultStr VARCHAR2(1000):='';
BEGIN
FOR c IN ( select ITEM_CODE from "op_operation_item" where "op_operation_item".GO_ORDER_ID = GO_ORDER_ID_IN) LOOP
	
	CASE 
	WHEN INSTR(c.ITEM_CODE, 'BK') > 0 THEN
	resultStr := CONCAT(resultStr, '0100#');
	WHEN INSTR(c.ITEM_CODE, 'NT') > 0 OR INSTR(c.ITEM_CODE, 'AT') > 0  THEN
		resultStr := CONCAT(resultStr, '0500#');
	WHEN INSTR(c.ITEM_CODE, 'CO') > 0 THEN
		resultStr := CONCAT(resultStr, '0300#');
	WHEN INSTR(c.ITEM_CODE, 'PS') > 0 THEN
		resultStr := CONCAT(resultStr, '0600#');
	WHEN INSTR(c.ITEM_CODE, 'CD') > 0 THEN
		resultStr := CONCAT(resultStr, '0400#');
	ELSE
		resultStr := CONCAT(resultStr, '');
END CASE;
END LOOP;
	RETURN resultStr;
END;

5.案例五

CREATE OR REPLACE FUNCTION "BRFR_BULK_VOLUME_FUNC" (GO_ORDER_ID_IN IN NUMBER DEFAULT '-1')
RETURN NUMBER
AS
 countNum NUMBER:=0 ;
BEGIN
 FOR c IN (select "op_container".WEIGHT_UNIT,"op_container".GROSS_WEIGHT from "go_order" LEFT JOIN "op_container"   on "go_order".GO_ORDER_ID = "op_container".GO_ORDER_ID where "go_order".GO_ORDER_ID = GO_ORDER_ID_IN )
LOOP

IF INSTR(c.WEIGHT_UNIT, 'KGS') > 0 THEN
 countNum := countNum+NVL(c.GROSS_WEIGHT, 0)*0.001;
ELSE
	countNum := countNum+NVL(c.GROSS_WEIGHT, 0);
END IF;

-- 	 dbms_output.put_line('11111111111111111');
END LOOP;

	RETURN countNum;
END;

6.案例六

CREATE OR REPLACE FUNCTION "BWFR_TEU_FUNC" (GO_ORDER_ID_IN IN NUMBER DEFAULT '-1')
RETURN NUMBER
AS
 countNum NUMBER:=0 ;
BEGIN

	FOR c IN (select CTN_TYPE_SIZE,QUANTITY from "op_container" where "op_container".GO_ORDER_ID = GO_ORDER_ID_IN) LOOP
-- 	    


  IF TO_NUMBER(SUBSTR( c.CTN_TYPE_SIZE, 1, 2 ) ) <= 20

THEN
	countNum := countNum+NVL(c.QUANTITY, 0);
	
ELSE
  countNum := countNum+NVL(c.QUANTITY, 0)*2;
	
END IF;
--  dbms_output.put_line(countNum);
END LOOP;

	RETURN countNum;
END;

7.案例七

CREATE OR REPLACE FUNCTION "BWFR_BMS_SUBCLASS_FUNC" (GO_ORDER_ID_IN IN NUMBER)
RETURN VARCHAR2
AS
resultStr VARCHAR2(1000):='';
HblFlag VARCHAR2(20):=''; 
BkFlag VARCHAR2(500):=''; 
BEGIN

FOR c IN ( SELECT SERVICE_CODE from "go_service_item" where GO_ORDER_ID = GO_ORDER_ID_IN ) LOOP
	
	CASE c.SERVICE_CODE
	WHEN 'HBL' THEN 
	HblFlag := CONCAT(HblFlag, 'HBL');
	BkFlag := CONCAT(BkFlag, 'HASEXISTS');
	EXIT;
		WHEN 'BK' THEN
		BkFlag := CONCAT(BkFlag, 'BK');
	ELSE
			BkFlag := CONCAT(BkFlag, 'HASEXISTS');
		
END CASE;

	
END LOOP;

CASE 
	WHEN INSTR(HblFlag, 'HBL') > 0 THEN
	resultStr := CONCAT(resultStr, '0103');
	WHEN INSTR(BkFlag, 'BK') > 0 AND INSTR(BkFlag, 'HASEXISTS') <= 0 THEN
	resultStr := CONCAT(resultStr, '0102');
	ELSE
		resultStr := CONCAT(resultStr, '0101');
END CASE;

	RETURN resultStr;
END;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值