最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 科技 - 知识百科 - 正文

Oracle中存储过程的创建之根据条件采番篇

来源:动视网 责编:小采 时间:2020-11-09 11:55:16
文档

Oracle中存储过程的创建之根据条件采番篇

Oracle中存储过程的创建之根据条件采番篇:下面是我在做项目中写的存储过程的例子,请参考! /* SQLPLUS中调用存贮过程方法如下: */ set serveroutput on;var C varchar2( 下面是我在做项目中写的存储过程的例子,请参考! /* SQLPLUS中调用存贮过程方法如下: */ set serverout
推荐度:
导读Oracle中存储过程的创建之根据条件采番篇:下面是我在做项目中写的存储过程的例子,请参考! /* SQLPLUS中调用存贮过程方法如下: */ set serveroutput on;var C varchar2( 下面是我在做项目中写的存储过程的例子,请参考! /* SQLPLUS中调用存贮过程方法如下: */ set serverout


下面是我在做项目中写的存储过程的例子,请参考! /* SQLPLUS中调用存贮过程方法如下: */ set serveroutput on;var C varchar2(

下面是我在做项目中写的存储过程的例子,请参考!

/* SQLPLUS中调用存贮过程方法如下: */

set serveroutput on;
var C varchar2(50);
exec aheoms.GetSEQ('0551','0',:C);
print C

-------------------------------------------------------------

/*
功能 :获得采
参数1:条件ID,可根据实际情况传入(AREA_ID,PLAN_ID等)
参数2:采番类型:
0:获得TBL_Y_PLAN的主键PLAN_ID
1: 获得TBL_Y_PLAN_ITEM的外键PLAN_ID
2: 获得TBL_M_PLAN的主键PLAN_ID
3: 获得TBL_M_PLAN_ITEM中ITEM_ID最大号进行采番
4: 获得TBL_ONDUTY_NOTE中的采NOTE_ID
参数3:
*/
CREATE OR REPLACE PROCEDURE AHEOMS.GetSEQ (
CONDITION_ID IN VARCHAR2,
SEQ_TYPE IN VARCHAR2,
SEQ_ID OUT VARCHAR2
)
IS
strCondition VARCHAR2(300);
strTempID VARCHAR2(50);
AREA_ID VARCHAR2(10);
BEGIN
IF SEQ_TYPE = '0' THEN
AREA_ID := CONDITION_ID;
strCondition := CONCAT(CONCAT(AREA_ID,SUBSTR(TO_CHAR(SYSDATE,'yyyy'),3,4)),'%');
SELECT MAX(PLAN_ID) INTO strTempID FROM TBL_Y_PLAN WHERE PLAN_ID LIKE strCondition;
IF LENGTH(strTempID) = 9 THEN
SEQ_ID := CONCAT(SUBSTR(strTempID,1,6),LPAD(TO_CHAR(TO_NUMBER(SUBSTR(strTempID,7,9)) + 1),3,'0'));
ELSE
SEQ_ID := CONCAT(CONCAT(AREA_ID,SUBSTR(TO_CHAR(SYSDATE,'yyyy'),3,4)),'001');
END IF;
--dbms_output.put_line(CONCAT('NEW TBL_Y_PLAN.PLAN_ID:',SEQ_ID));
END IF;
--参数2为:1 通过传入的PLAN_ID,获得TBL_Y_PLAN_ITEM中ITEM_ID最大的号并加1
IF SEQ_TYPE = '1' THEN
SELECT MAX(ITEM_ID) INTO strTempID FROM TBL_Y_PLAN_ITEM WHERE PLAN_ID = CONDITION_ID;
IF LENGTH(strTempID) >0 THEN
SEQ_ID := LPAD(TO_CHAR(strTempID + 1),4,'0');
ELSE
SEQ_ID := '0001';
END IF;
END IF;
--参数2为:2通过传入的AREA_ID,自动计算出月计划编号,格式为05510508001
IF SEQ_TYPE = '2' THEN
AREA_ID := CONDITION_ID;
strCondition := CONCAT(CONCAT(CONDITION_ID,SUBSTR(TO_CHAR(SYSDATE,'yyyymm'),3,6)),'%');
SELECT MAX(PLAN_ID) INTO strTempID FROM TBL_M_PLAN WHERE PLAN_ID LIKE strCondition;
IF LENGTH(strTempID) = 11 THEN
SEQ_ID := CONCAT(SUBSTR(strTempID,1,8),LPAD(TO_CHAR(TO_NUMBER(SUBSTR(strTempID,9,11)) + 1),3,'0'));
ELSE
SEQ_ID :=CONCAT(CONCAT(AREA_ID,SUBSTR(TO_CHAR(SYSDATE,'yyyymm'),3,6)),'001');
END IF;
END IF;
--参数2为:3 通过传入的PLAN_ID,获得TBL_M_PLAN_ITEM中ITEM_ID最大的号并加1
IF SEQ_TYPE = '3' THEN
SELECT MAX(ITEM_ID) INTO strTempID FROM TBL_M_PLAN_ITEM WHERE PLAN_ID = CONDITION_ID;
IF LENGTH(strTempID) >0 THEN
SEQ_ID := LPAD(TO_CHAR(strTempID + 1),4,'0');
ELSE
SEQ_ID := '0001';
END IF;
END IF;
--参数2为:4 通过传入的LOG_ID,获得TBL_ONDUTY_NOTE中NOTE_ID最大号并加1
IF SEQ_TYPE = '4' THEN
SELECT MAX(NOTE_ID) INTO strTempID FROM TBL_ONDUTY_NOTE WHERE LOG_ID = CONDITION_ID;
IF LENGTH(strTempID) > 0 THEN
SEQ_ID := strTempID+1;
ELSE
SEQ_ID := 1;
END IF;
END IF;
END GetSEQ;

这样在sqlplus中就可以创建存储过程了.

其中以SEQ_TYPE为标志,进行区分不同函数功能.

文档

Oracle中存储过程的创建之根据条件采番篇

Oracle中存储过程的创建之根据条件采番篇:下面是我在做项目中写的存储过程的例子,请参考! /* SQLPLUS中调用存贮过程方法如下: */ set serveroutput on;var C varchar2( 下面是我在做项目中写的存储过程的例子,请参考! /* SQLPLUS中调用存贮过程方法如下: */ set serverout
推荐度:
标签: 创建 条件 oracle
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top