各位仁兄,本人刚接触oracle,实属一窍不通。现在需要写个简单的方法,求赐教。如果对方传进来两个数,第一个数是个编号(4位)如:1234,第二个数代表生成前面那个编号的个数(如3个)
而我必须返回的数据是:14位的一个数据。  (4位编号)1234 +(今年的年份)2011 + (自动生成号6位,随个数递增) 000001
这个自动生成号有个Sequences ,开始于1,增量为1, 最大值是999999 。命名为seq_a最后的结果是:123420110000011234201100000212342011000003

解决方案 »

  1.   

    create or replace function f_getresult( sHead varchar2, nCount number)
     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 ;
      

  2.   


    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;
      

  3.   

    CREATE OR REPLACE FUNCTION func(f_id NUMBER, f_num NUMBER) 
    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;
      

  4.   

    谢谢啊还有,想问一下1楼:ltrim(to_char(nSerial ,'000000')) 
    这个ltrim方法在这里有什么作用呢? 直接to_char方法就能达到效果了啊。 
      

  5.   

    to_char方法左侧会有空格,需要用ltrim去除空格,楼主可以尝试把ltrim去除就能看到效果。
      

  6.   

    具体解释如下:
    to_char(nSerial, '000000')格式化得到的字符串是7位,其中第1位是数字的正负符号的,正号就是一个空格,所以需要用ltrim来去除空格。或者也可以使用to_char(nSerial, 'FM000000')格式化出的字符串就不带符号了。
      

  7.   


    噢,确实有个空格 。 那to_char(sysdate,'YYYY')这个方法为什么没空格呢?
      

  8.   

    我在6楼已经做了解答,只有数字型的to_char才会有空格,因为数值有正负值,正数左侧就会有空格。to_char的格式化字符串前面加上FM就可以去除这个空格,使用ltrim也可以。