有PL / SQL麻烦

时间:2014-03-15 10:27:05

标签: sql plsql

问题内容如下。创建一个名为FIND_DISCOUNT的过程,该过程接收作为输入参数预订的席位数,并通过输出参数返回折扣百分比。使用折扣表来检索折扣百分比。 表格如下;两列三行。第一栏:10 20 30.第二栏:15 20 25。

现在我可以创建一个程序来简单地检查第一列并在第二列中返回金额,但我必须考虑到座位数不是固定值,例如:23这意味着它没有直接列在该表虽然超过20但不到30,所以折扣百分比为20%。我没有问题硬编码值和使用if语句来查找输出,但问题清楚地表明使用表格,我遇到了一个解决方案,它接受输入参数并将其与表中的多个值进行比较

请帮助我可以在必要时发布更多信息,我不是要求任何人给我一个解决方案,而只是告诉我应该如何思考。 提前谢谢。

2 个答案:

答案 0 :(得分:1)

如果座位数在折扣表中,那么您可以使用诸如

之类的查询获得折扣百分比
SELECT discount_percentage
  INTO v_discount_percentage
  FROM your_table
 WHERE number_of_seats = p_number_of_seats;

此处,p_number_of_seats是席位数,可能是传递给过程的参数,而v_discount_percentage是一个保留返回折扣百分比的局部变量。

但是,如果座位数不在表中怎么办?在这种情况下,您希望将席位数向下舍入到表中的下一个值。从本质上讲,您要查找的席位数是number_of_seats列中不超过p_number_of_seats的最大值。

我建议使用两个查询:

  • 一个用于获取number_of_seats中的最大值不超过p_number_of_seats
  • 使用从上一个查询中获得的最大值来查找折扣百分比。

请注意处理座位数太小而无法应用任何折扣的情况。

答案 1 :(得分:0)

试一试,解决方案太简单了。

折扣表:

COLUMN1 COLUMN2

======= =======

10 15
20 20
30 25

PROCDURE IS:

create or replace procedure FIND_DISCOUNT(p_booked_seats in number,
                                          p_discount     out number) is
  cursor cur_discount is
    select column1, column2 from discount order by 1 ;
begin
  p_discount := 0;
  for rec in cur_discount loop
    if p_booked_seats >= rec.column1 then
      p_discount := rec.column2;
    end if;

  end loop;

end;

程序测试:

begin
  -- Call the procedure
  find_discount(p_booked_seats => :p_booked_seats,
                p_discount => :p_discount);
end;