oracle用光标创建函数,它总结了另一个函数

时间:2018-04-18 13:19:36

标签: oracle plsql cursor

我在这里有一个函数和游标的情况。我得到函数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)。

我需要做些什么才能实现这一目标?感谢

1 个答案:

答案 0 :(得分:0)

目前尚不清楚<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 |