我需要创建一个 cursor/function/procedure 来获得这个结果
I need to create a cursor/function/procedure to get this result
我有这个table:
+----+-------+----------+---------------+
| ID | Name | Contract | ContractValue |
+----+-------+----------+---------------+
| 1 | Mike | 001 | 100$ |
+----+-------+----------+---------------+
| 1 | Mike | 004 | 177$ |
+----+-------+----------+---------------+
| 2 | Diana | 002 | 300$ |
+----+-------+----------+---------------+
| 2 | Diana | 003 | 150$ |
+----+-------+----------+---------------+
然后 SQL 我得到这个结果:
SELECT Name, SUM(ContractValue) as ContractValue
FROM table
GROUP BY Name;
+-------+---------------+
| Name | ContractValue |
+-------+---------------+
| Mike | 277$ |
+-------+---------------+
| Diana | 450$ |
+-------+---------------+
我需要创建一个与 table above.Of 课程结果相同的 cursor/function/procedure 而不是 table 它应该是这样的字符串“迈克设法获得了 277 美元”。有谁知道该怎么做?
所以,您的 table 实际上将 100$
存储在 contractvalue
中?这意味着它是一个字符串,这是一个非常糟糕的数据模型。如果您必须对其进行数学运算,则需要一个数字列:contractvalue_usd
存储 100
。拥有一个字符串意味着您将任由用户以任何格式输入任何旧垃圾。
无论如何,解决您的实际问题。有多种不同的方法可以解决这个问题。这是一个 returns 嵌套 table 格式化字符串的函数:
create or replace function get_contract_summary
return sys.dbms_debug_vc2coll
as
return_value sys.dbms_debug_vc2coll;
begin
select name || ' managed to obtain '
|| to_char( total_contractvalue ) ||'$'
bulk collect into return_value
from (
select name,
sum(to_number(replace(contractvalue, '$'))) as total_contractvalue
from contracts
group by name
);
return return_value;
end get_contract_summary;
/
运行 像这样:
SQL> select * from table(get_contract_summary)
2 /
COLUMN_VALUE
--------------------------------------------------------------------------------
Diana managed to obtain 450$
Mike managed to obtain 277$
SQL>
我有这个table:
+----+-------+----------+---------------+
| ID | Name | Contract | ContractValue |
+----+-------+----------+---------------+
| 1 | Mike | 001 | 100$ |
+----+-------+----------+---------------+
| 1 | Mike | 004 | 177$ |
+----+-------+----------+---------------+
| 2 | Diana | 002 | 300$ |
+----+-------+----------+---------------+
| 2 | Diana | 003 | 150$ |
+----+-------+----------+---------------+
然后 SQL 我得到这个结果:
SELECT Name, SUM(ContractValue) as ContractValue
FROM table
GROUP BY Name;
+-------+---------------+
| Name | ContractValue |
+-------+---------------+
| Mike | 277$ |
+-------+---------------+
| Diana | 450$ |
+-------+---------------+
我需要创建一个与 table above.Of 课程结果相同的 cursor/function/procedure 而不是 table 它应该是这样的字符串“迈克设法获得了 277 美元”。有谁知道该怎么做?
所以,您的 table 实际上将 100$
存储在 contractvalue
中?这意味着它是一个字符串,这是一个非常糟糕的数据模型。如果您必须对其进行数学运算,则需要一个数字列:contractvalue_usd
存储 100
。拥有一个字符串意味着您将任由用户以任何格式输入任何旧垃圾。
无论如何,解决您的实际问题。有多种不同的方法可以解决这个问题。这是一个 returns 嵌套 table 格式化字符串的函数:
create or replace function get_contract_summary
return sys.dbms_debug_vc2coll
as
return_value sys.dbms_debug_vc2coll;
begin
select name || ' managed to obtain '
|| to_char( total_contractvalue ) ||'$'
bulk collect into return_value
from (
select name,
sum(to_number(replace(contractvalue, '$'))) as total_contractvalue
from contracts
group by name
);
return return_value;
end get_contract_summary;
/
运行 像这样:
SQL> select * from table(get_contract_summary)
2 /
COLUMN_VALUE
--------------------------------------------------------------------------------
Diana managed to obtain 450$
Mike managed to obtain 277$
SQL>