oracle create function with cursor 求和另一个函数

oracle create function with cursor which sums another function

我这里有一种情况是函数和游标。我得到了 Fun_1 函数 return 我 ref_cursor 和这种类型的数据:

<SYSTEM_NAME=SPORT1,CASH_IN=1, CASH_OUT=0, NET_WIN=1, VAUCHER=0>, <SYSTEM_NAME=SPORT2,CASH_IN=279,CASH_OUT=57.86,NET_WIN=278.71, VAUCHER=0.29>,<SYSTEM_NAME=SPORT3,CASH_IN=9.22,CASH_OUT=0.5, NET_WIN=9.22, VAUCHER=0>;

现在我想创建函数,它将 return SUM(CASH_IN)、SUM(CASH_OUT)、SUM(NET_WIN) 和 SUM(VAUCHER) 来自Fun1 函数。

我需要做什么才能达到这个目的?谢谢

不清楚 <SYSTEM_NAME=SPORT1CASH_IN=1 等是单独的列还是从您的函数返回的整个字符串的一部分。如果他们是一部分 对于整个字符串,您可以像下面的查询一样使用 REGEXP_SUBSTR。这里假设 = 之后的所有值都将是整数或小数。

如果它们是单独的列值,那么您可以简单地在每一列上使用 SUBSTR(s,INSTR(s,'=') + 1) 来获取 '=' 之后的值。

SQL Fiddle

WITH c
     AS (SELECT REGEXP_SUBSTR(s, 'CASH_IN=([0-9.]+)',  1, 1, NULL, 1)  a,
                REGEXP_SUBSTR(s, 'CASH_OUT=([0-9.]+)', 1, 1, NULL, 1) b,
                REGEXP_SUBSTR(s, 'NET_WIN=([0-9.]+)',  1, 1, NULL, 1)  c,
                REGEXP_SUBSTR(s, 'VAUCHER=([0-9.]+)',  1, 1, NULL, 1)  d
         FROM   t)
SELECT SUM(a) AS sum_CASH_IN,
       SUM(b) AS sum_CASH_OUT,
       SUM(c) AS sum_NET_WIN,
       SUM(d) AS sum_VAUCHER
FROM   c;  

Results:

| SUM_CASH_IN | SUM_CASH_OUT | SUM_NET_WIN | SUM_VAUCHER |
|-------------|--------------|-------------|-------------|
|      289.22 |        58.36 |      288.93 |        0.29 |