我在这里有一个函数和游标的情况。我得到函数Fun_1,它返回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>;
现在我想创建一个函数,它将从Fun1函数返回SUM(CASH_IN),SUM(CASH_OUT),SUM(NET_WIN)和SUM(VAUCHER)。
我需要做些什么才能实现这一目标?感谢
答案 0 :(得分:0)
目前尚不清楚<SYSTEM_NAME=SPORT1
,CASH_IN=1
等是单个列还是从函数返回的整个字符串的一部分。如果他们是一部分
在整个字符串中,您可以在下面的查询中使用REGEXP_SUBSTR
。这里的假设是=
之后的所有值都将是整数或小数。
如果它们是单独的列值,那么您只需在每列上使用SUBSTR(s,INSTR(s,'=') + 1)
即可获得'='
之后的值。
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 |