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;
(编辑:核心网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |