这是SQL SERVER数据库的创建函数语句,在sql plus中当然不行。

解决方案 »

  1.   

    请问在Oracle的什么工具里可以运行上面的语句?
      

  2.   

    这是个SQL Server的语句,在Oracle上必须做语法的移植,不然无法运行。
      

  3.   

    这是一个字符串汇总的函数,在Oracle里有别的方式实现。
      

  4.   

    呵呵,高手又来了。
    多谢!请问在Oracle下如何实现?
      

  5.   

    SELECT A , SUM( B ) FROM MyTab GROUP BY A ;
    这是大家再熟悉不过的写法,这是根据A列统计B列的和。
    有些时候,B列是字符串类型的列,就像这样
    A        |  B
    ---------------
    a          aa
    a          bb
    a          cc
    139045771  33
    139045771  44
    139045771  55
    a          dd
    我想要得到这样的结果:
    139045771  33,44,55
    a          aa,bb,cc,dd
    相当于想要把字符串“加和”解决的方式如下,麻烦了一点
    先编译这个函数SumString
    CREATE OR REPLACE FUNCTION SumString(  
       I_TableName       IN VARCHAR2 ,  
       I_GroupColName    IN VARCHAR2 ,  
       I_ResultColName   IN VARCHAR2 ,  
       I_GroupColValue   IN VARCHAR2 , 
       I_Separator       IN VARCHAR2 
       ) 
    RETURN VARCHAR2 IS 
       TYPE T_Cur IS REF CURSOR ; 
       C_Cur    T_Cur ; 
       V_Sql    VARCHAR2(2000) ; 
       V_Result VARCHAR2(2000) ; 
       V_Tmp VARCHAR2(200) ; 
       V_Cnt NUMBER := 0 ; 
    BEGIN 
       V_Result := '' ; 
       V_Sql := 'SELECT '|| I_ResultColName ||' FROM '|| I_TableName ||' WHERE '|| I_GroupColName || ' = '''|| I_GroupColValue || '''' ; 
       OPEN C_Cur FOR V_Sql ; 
       LOOP 
         FETCH C_Cur INTO V_Tmp ; 
         EXIT WHEN C_Cur%NOTFOUND ; 
         IF V_Cnt = 0 THEN 
            V_Result := V_Tmp ; 
         ELSE 
            V_Result := V_Result || I_Separator || V_Tmp  ; 
         END IF ; 
         V_Cnt := V_Cnt + 1 ; 
       END LOOP ; 
       CLOSE C_Cur ; 
        
       RETURN V_Result ; 
    END SUMSTRING; 再执行以下语句测试: 
    CREATE TABLE TestSumString( a VARCHAR2(10) , b VARCHAR2(10) ) ; 
    INSERT INTO TestSumString VALUES( 'a' , 'aa' ) ;
    INSERT INTO TestSumString VALUES( 'a' , 'bb' ) ;
    INSERT INTO TestSumString VALUES( 'a' , 'cc' ) ;
    INSERT INTO TestSumString VALUES( '139045771' , '33' ) ;
    INSERT INTO TestSumString VALUES( '139045771' , '44' ) ;
    INSERT INTO TestSumString VALUES( '139045771' , '55' ) ;
    INSERT INTO TestSumString VALUES( 'a' , 'dd' ) ;
    COMMIT ; 
    SELECT A , SumString( 'TestSumString', 'a' , 'b' , a , ',' ) SUM_B FROM TestSumString GROUP BY A ;运行结果如下:
    A          SUM_B
    ---------- ---------------
    139045771  33,44,55
    a          aa,bb,dffdfd,dd
    和普通的GroupBy使用方法上没什么不同
    SumString函数的5各参数的意思分别是: 
    1. 表名; 
    2. 你想Group BY的字段名 
    3. 你想sum的那个字段名 
    4. Group By字段的值 
    5. Sum字符串时的分隔符