Oracle存储过程案例

案例

定义变量、游标,使用游标,执行循环、选择结构…

CREATE OR REPLACE PROCEDURE DB.GET_GYBOP 
IS
 
	DP VARCHAR(64);  	-- GROUP
	PGU VARCHAR(64); 	-- PARENT GROUPUID
	LST1 VARCHAR(64); 	-- LIST1
	LST2 VARCHAR(64); 	-- LIST2
	LST3 VARCHAR(64); 	-- LIST3
	
	-- 游标
	CURSOR CRS IS 
		SELECT P1.PITEM_ID 								AS GYBOP_ID
			,PO.POBJECT_NAME 							AS GYBOP_NAME
			,PR1.PITEM_REVISION_ID 						AS GYBOP_VER_ID
			,PGY9.PGY9_PLANT 							AS GYBOP_PLANT
			,to_char((PO.PDATE_RELEASED + INTERVAL '8' HOUR),'yyyy-MM-dd HH24:mi:ss') AS GYBOP_VER_ISSUE_TIME
			,PU.PUSER_NAME||'('||PU.PUSER_ID||')' 		AS OWNING_USER
			,PPA.ROWNING_GROUPU 						AS GROUPUID
		FROM INFODBA.PITEM 						P
			,INFODBA.PITEMREVISION 				PR
			,INFODBA.PWORKSPACEOBJECT 			PO
			,INFODBA.PGY9MAINPROCESSREVISION 	PGY9
			,INFODBA.PPOM_APPLICATION_OBJECT 	PPA
			,INFODBA.PPOM_USER					PU
		WHERE P.PUID = PR.RITEMS_TAGU
			AND PR.PUID = PO.PUID
		--	AND PO.POBJECT_TYPE = 'GY9MainProcessRevision'
			AND PR.PUID = PGY9.PUID
			AND PR.PUID = PPA.PUID
			AND PPA.ROWNING_USERU = PU.PUID
			AND PO.PDATE_RELEASED IS NOT NULL
		;
			
BEGIN
	-- for循环
	FOR CR IN CRS LOOP
		LST1 := '';
		LST2 := '';
		LST3 := '';
		PGU := CR.GROUPUID;
		
		-- while循环
		WHILE PGU != 'AAAAAAAAAAAAAA' LOOP
		
			SELECT PG.PNAME, PG.RPARENTU 
			INTO DP,PGU
			FROM INFODBA.PPOM_GROUP PG 
			WHERE PG.PUID = PGU;
			
			LST3 := LST2;
			LST2 := LST1;
			LST1 := DP;
		END LOOP;
		
		-- if语句
		IF LST3 IS NOT NULL THEN
			-- 导入数据
			INSERT INTO DB.GYBOP(
				,GYBOP_ID
				,GYBOP_NAME
				,GYBOP_VER_ID
				,GYBOP_PLANT
				,GYBOP_VER_ISSUE_TIME
				,OWNING_USER
				,GYBOP_VER_BELONG_ORG_NAME
				,GYBOP_VER_PRODUCTLINE
				,DATE_NOW)
			VALUES (
				,CR.GYBOP_ID
				,CR.GYBOP_NAME
				,CR.GYBOP_VER_ID
				,CR.GYBOP_PLANT
				,CR.GYBOP_VER_ISSUE_TIME
				,CR.OWNING_USER
				,LST2
				,LST3
				,sysdate);
			COMMIT;
		END IF;
	END LOOP;
END GET_GYBOP;

补充case when语句

CASE 
	WHEN LST3 = 'Small' 	THEN LST3 := '小型';
	WHEN LST3 = 'Medium' 	THEN LST3 := '中型';
	WHEN LST3 = 'Large' 	THEN LST3 := '大型';
	ELSE LST3 := LST3;
END CASE;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值