各位仁兄,本人刚接触oracle,实属一窍不通。现在需要写个简单的方法,求赐教。如果对方传进来两个数,第一个数是个编号(4位)如:1234,第二个数代表生成前面那个编号的个数(如3个)
而我必须返回的数据是:14位的一个数据。 (4位编号)1234 +(今年的年份)2011 + (自动生成号6位,随个数递增) 000001
这个自动生成号有个Sequences ,开始于1,增量为1, 最大值是999999 。命名为seq_a最后的结果是:123420110000011234201100000212342011000003
而我必须返回的数据是:14位的一个数据。 (4位编号)1234 +(今年的年份)2011 + (自动生成号6位,随个数递增) 000001
这个自动生成号有个Sequences ,开始于1,增量为1, 最大值是999999 。命名为seq_a最后的结果是:123420110000011234201100000212342011000003
return varchar2
is
sResult varchar2(4000);
nSerial number;
begin
for i in 1..nCount loop
SELECT seq_a.nextval into nSerial from dual;
sResult := sResult||sHead||to_char(sysdate,'YYYY')||ltrim(to_char(nSerial ,'000000'));
end loop;
return sResult;
end ;
CREATE OR REPLACE FUNCTION get_seq(in_bianhao NUMBER, in_geshu NUMBER)
RETURN VARCHAR2
IS
return_seq VARCHAR2(200):='';
BEGIN
FOR i IN 1..in_geshu LOOP
return_seq :=return_seq||in_bianhao||to_char(SYSDATE,'YYYY')||lpad(to_char(F_GET_SEQ.NEXTVAL),6,'0');
END LOOP;
RETURN return_seq;
END;
RETURN VARCHAR2
IS
return_value VARCHAR2(255):='';
BEGIN
FOR i IN 1..f_num LOOP
return_value :=return_value||f_id||to_char(SYSDATE,'YYYY')||lpad(seq_a.NEXTVAL,6,'0');
END LOOP;
RETURN return_value;
END;
这个ltrim方法在这里有什么作用呢? 直接to_char方法就能达到效果了啊。
to_char(nSerial, '000000')格式化得到的字符串是7位,其中第1位是数字的正负符号的,正号就是一个空格,所以需要用ltrim来去除空格。或者也可以使用to_char(nSerial, 'FM000000')格式化出的字符串就不带符号了。
噢,确实有个空格 。 那to_char(sysdate,'YYYY')这个方法为什么没空格呢?