Create Function Union_TIMECARDDATA(@ID nvarchar(40),@Date Varchar(10))
Returns Varchar(1000)
As
Begin
Declare @S Varchar(1000)
Set @S=''
Select @S=@S+TimeCardTime+',' From ATDTIMECARDDATA Where PERSONID=@ID And TimeCardDate=@Date Order By PERSONID,TimeCardDate,TimeCardTime
Return(Left(@S,Len(@S)-1))
End
GO

解决方案 »

  1.   

    我试着改了一下,总是报错:Create Function Union_TIMECARDDATA(P_ID nvarchar2(40),P_Date Varchar2(10)) 
    Return Varchar2(1000) 
    is
    P_S Varchar(1000); 
    Begin 
    P_S='' ;
    Select P_S=P_S||TimeCardTime||',' From ATDTIMECARDDATA Where PERSONID=P_ID And TimeCardDate=P_Date Order By PERSONID,TimeCardDate,TimeCardTime; 
    Return(P_S); 
    End; 
      

  2.   

    Create OR REPLACE Function Union_TIMECARDDATA(P_ID nvarchar2(40),P_Date Varchar2(10)) 
    Return Varchar2(1000) 
    is 
    P_S Varchar(1000); 
    Begin 
    P_S='' ; 
    Select P_S=P_S||TimeCardTime||',' From ATDTIMECARDDATA Where PERSONID=P_ID And TimeCardDate=P_Date Order By PERSONID,TimeCardDate,TimeCardTime; 
    Return(P_S); 
    End; 
      

  3.   

    改成这样,虽然不报错,但是抓不出数据:Create OR REPLACE Function Union_TIMECARDDATA(P_ID nvarchar2(40),P_Date Varchar2(10)) 
    Return Varchar2(1000) 
    is 
    P_S Varchar(1000); 
    R_S Varchar(1000); 
    Begin 
    R_S:='' ; 
    Select TimeCardTime into P_S From ATDTIMECARDDATA Where PERSONID=P_ID And TimeCardDate=P_Date Order By PERSONID,TimeCardDate,TimeCardTime; 
    R_S:=R_S||','||P_S
    Return(R_S); 
    End; 其中TimeCardTime 是表ATDTIMECARDDATA 的一个字段.哪位高手帮忙看看哪里写错了,谢谢!
      

  4.   


    create or replace function Union_TIMECARDDATA(v_ID nvarchar2,v_Date Varchar2)
    return varchar2
    as
     v_s varchar2(1000);
    begin
      v_s := '';
      for rec in(Select TimeCardTime From ATDTIMECARDDATA 
                 Where PERSONID=v_ID And TimeCardDate=v_Date 
                 Order By PERSONID,TimeCardDate,TimeCardTime 
                )
      loop
        v_s := v_s||rec.TimeCardTime||',';  
      end loop;
      v_s := substr(v_s,1,length(v_s)-1);
      return v_s;
    end;
    /
      

  5.   

    OK了,對於ORacle還不熟,循環寫得好,謝謝了.
      

  6.   

    下次如果是富农还只发10分贴会被鄙视的噢: :-)
    CREATE OR REPLACE FUNCTION UNION_TIMECARDDATA(ID_IN VARCHAR2,DATE_IN VARCHAR2)RETURN VARCHAR2 IS
      CUR_IN SYS_REFCURSOR;
      P_S VARCHAR2(1000);
      V_SQL VARCHAR2(1000);
      V_DATE DATE;
    BEGIN
      V_SQL := 'SELECT TIMECARDTIME 
                  FROM ATDTIMECARDDATA 
                 WHERE PERSONID = :IDS
                   AND TIMECARDDATE = :DATES 
                 ORDER BY PERSONID,TIMECARDDATE,TIMECARDTIME';
      OPEN CUR_IN FOR V_SQL USING ID_IN,DATE_IN;
      LOOP
      EXIT WHEN CUR_IN%NOTFOUND;
      FETCH CUR_IN INTO V_DATE;
        P_S := V_DATE || ',';
      END LOOP;
      
      IF CUR_IN%ISOPEN THEN
      CLOSE CUR_IN;
      END IF;
      
      RETURN(RTRIM(P_S,','));
    END;