当天执行一个存储过程,每次执行一次该存储过程返回值为:
00,
01,
02,
...
如果明天在执行该存储过程,返回值又是:
00,
01,
02,
...
请问该怎么写这个存储过程?
00,
01,
02,
...
如果明天在执行该存储过程,返回值又是:
00,
01,
02,
...
请问该怎么写这个存储过程?
解决方案 »
- oracle查询日期的问题
- Alter Index Allocate Extent 有什么用处?
- 使用imp时,提示用户名/密码错误,oracle
- 求 Oracle 入门书籍
- 我要向oracle插入大量数据,平均每天是1千万条,请问各位专家高手如何提高插入速度和性能
- 请教:奇怪的OCI-22053问题
- 奇怪的问题
- 紧急求救!我在网上下载了一个plsqldev.exe文件,安装之后。。。。。。
- oracle8.0.5和oracle8.1.7不能exp ORACLE7.0.3K吗?一定给分,在线等
- 在ORACLE中如何删除以前的数据库服务?
- 一个超级新手问的ORACLE开发的问题!
- 求sql写法,谢谢!
ID Tvalue Tdate
1 90 20080808
2 00 20080828每次取Tdate最大的一条记录与系统时间比较,是同一天则取Tvalue值,然后更新Tvalue。否则,插入一条Tvalue为00,Tdate为当天的新记录。取Tdate最大的一条记录可以这么取:select Tvalue from
(
select * from Ttable
order by Tdate desc
)
where rownum = 1
CREATE TABLE T_SEQ(A DATE);--建个表判断是否是新的一天
CREATE OR REPLACE PROCEDURE GET_SEQ(P_OUT OUT VARCHAR2) IS L_S1 VARCHAR2(10);
L_I1 INT;
BEGIN
SELECT COUNT(*) INTO L_I1 FROM T_SEQ;
IF L_S1 = 0 THEN
BEGIN
EXECUTE IMMEDIATE 'create sequence seq_1';
EXCEPTION
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE(SQLERRM);
END;
INSERT INTO T_SEQ VALUES (SYSDATE);
COMMIT;
SELECT lpad(SEQ_1.NEXTVAL,2,'0') INTO P_OUT FROM DUAL;
ELSE
SELECT TO_CHAR(A, 'yyyy-mm-dd') INTO L_S1 FROM T_SEQ;
IF L_S1 = TO_CHAR(SYSDATE, 'yyyy-mm-dd') THEN
SELECT lpad(SEQ_1.NEXTVAL,2,'0') INTO P_OUT FROM DUAL;
ELSE
DELETE FROM T_SEQ;
INSERT INTO T_SEQ VALUES (SYSDATE);
COMMIT;
BEGIN
EXECUTE IMMEDIATE 'drop sequence seq_1';
EXECUTE IMMEDIATE 'create sequence seq_1';
EXCEPTION
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE(SQLERRM);
END;
SELECT lpad(SEQ_1.NEXTVAL,2,'0') INTO P_OUT FROM DUAL;
END IF;
END IF;
END GET_SEQ;
/--测试
DECLARE L_V VARCHAR2(10);
BEGIN
GET_SEQ(L_V);
DBMS_OUTPUT.PUT_LINE(L_V);
END;
/
创建SEQUENCE
DROP SEQUENCE AT2;CREATE SEQUENCE AT2
START WITH 0
MAXVALUE 99
MINVALUE 0
CYCLE
CACHE 20
NOORDER;返回的值:
select lpad(at2.nextval,2,'0') from dual