【发布时间】:2018-08-04 22:39:27
【问题描述】:
我需要创建一个程序,它接受一个人姓名的第一个和最后一个字母,并返回他购买的总成本和总物品。我不知道如何使用光标,我也在想我必须使用 for 循环和异常处理,因为可能有很多人具有相同的开始和结束字母。
到目前为止,我想出了这个:
create or replace procedure total_spent(v_fname IN
saleinv.cname%TYPE,v_lname IN saleinv.cname%TYPE.v_netspend OUT
saleinv.net%TYPE,v_totalpurch OUT NUMBER) AS
Begin
select sum(net+tax),count(net) into v_netspend,v_totalpurch from saleinv
where cname LIKE '&v_fname%&v_lname';
END;
/
ACCEPT p_fname PROMPT 'Enter The first letter of customer's name'
ACCEPT p_lname PROMPT 'Enter the last letter of customer's name'
BEGIN
totalspent('&p_fname',&'p_lname');
【问题讨论】:
-
对于输出,我将使用一个变量。
-
听起来基于集合的方法完全没问题,而且不需要光标。 (但您可能希望将查询的like 表达式重写为
LIKE v_fname || '%' || v_lname。) -
它说我必须使用光标。除了表达之外,其他一切都好吗?
-
因此,如果某人的名字是“SingH”,您必须提供“S”和“H”作为参数并返回一些与“他”相关的值(如您所说)。如果该表包含一个名为“SetH”的人,即他们都共享相同的第一个字母和最后一个字母,该怎么办。你会返回谁的数据?
-
为此我必须使用 for 循环为我认为具有相似字母的每个人提取数据
标签: sql plsql plsqldeveloper plsql-package