加入收藏 | 设为首页 | 会员中心 | 我要投稿 核心网 (https://www.hxwgxz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 教程 > 正文

Oracle学习记录之使用自定义函数和触发器达成主键动态生成

发布时间:2021-10-25 10:30:24 所属栏目:教程 来源:互联网
导读:查询表中是否有记录 SELECT COUNT(TENDER_ID) INTO hasCount FROM TENDER; IF hasCount 0 THEN -- 查询必要信息 SELECT TENDER_ID INTO lastID FROM TENDER WHERE ROWNUM = 1 ORDER BY to_number(to_char(scn_to_timestamp(ORA_ROWSCN),yyyyMMddhh24mmss),99
 查询表中是否有记录 
SELECT "COUNT"(TENDER_ID) INTO hasCount FROM TENDER; 
IF hasCount > 0 THEN 
-- 查询必要信息 
SELECT TENDER_ID INTO lastID FROM TENDER WHERE ROWNUM = 1 ORDER BY to_number(to_char(scn_to_timestamp(ORA_ROWSCN),'yyyyMMddhh24mmss'),'99999999999999') DESC; 
SELECT "SUBSTR"(lastID, 3, 8) INTO lastTime FROM dual; 
-- 分析上一次发布招标信息是否是今日 
IF ("TO_CHAR"(SYSDATE,'YYYYMMDD') = lastTime) THEN 
SELECT "TO_NUMBER"("SUBSTR"(lastID, 11, 13), '999') INTO lastNo FROM dual; 
-- 如果是今日且流水号允许新增招标信息 
IF lastNo < 999 THEN 
SELECT lastNo + 1 INTO curNo FROM dual; 
RETURN 'ZB'||lastTime||"LPAD"("TO_CHAR"(curNo), 3, '0'); 
END IF; 
-- 流水号超出 
RETURN 'NoOutOfBounds!Check it!'; 
END IF; 
-- 不是今日发布的招标信息,今日是第一次 
RETURN 'ZB'||"TO_CHAR"(SYSDATE,'YYYYMMDD')||'001'; 
END IF; 
-- 整个表中的第一条数据 
RETURN 'ZB'||"TO_CHAR"(SYSDATE,'YYYYMMDD')||'001'; 
END; 
 

(编辑:核心网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读