在去年一个实验性项目中有这样一个问题,饭店根据顾客消费意愿进行菜单自动生成,如:699元套餐、899元套餐等。菜品类型有凉菜、热菜、蒸菜等等,具体需求不详细描述。关键是一个根据消费金额自动生成菜单的算法。可惜当时的代码找不到了。
今天在论坛中又遇到一个类似问题,正好可用以回顾。如下:
表结构:

SQL> create table t_money(id int primary key,amount int not null);
 
Table created
 
Executed in 0.468 seconds

插入数据:

Code
SQL> insert into t_money values(1,2);
 
1 row inserted
 
Executed in 0 seconds
 
SQL> insert into t_money values(2,2);
 
1 row inserted
 
Executed in 0 seconds
 
SQL> insert into t_money values(3,3);
 
1 row inserted
 
Executed in 0 seconds
 
SQL> insert into t_money values(4,5);
 
1 row inserted
 
Executed in 0 seconds
 
SQL> insert into t_money values(5,2);
 
1 row inserted
 
Executed in 0.016 seconds
 
SQL> insert into t_money values(6,8);
 
1 row inserted
 
Executed in 0.016 seconds
 
SQL> insert into t_money values(7,1);
 
1 row inserted
 
Executed in 0 seconds
 
SQL> insert into t_money values(8,2);
 
1 row inserted
 
Executed in 0 seconds
 
SQL> insert into t_money values(9,3);
 
1 row inserted
 
Executed in 0 seconds
 
SQL> insert into t_money values(10,3);
 
1 row inserted
 
Executed in 0 seconds
Code
SQL> select substr(id,1,3) id,substr(amount,1,3) amount from t_money;
 
ID     AMOUNT
------ ------
1      2
2      2
3      3
4      5
5      2
6      8
7      1
8      2
9      3
10     3
 
10 rows selected
 
Executed in 0.156 seconds

问题是:
从表中选取若干条数据,使得被选出来的几条数据的amount(金额)字段之和等于10,要求存储过程能返回被选取出来的数据的序列号。 举例:2+3+5=10 返回序列号:1,3,4 
存储过程代码:

Code
create or replace procedure P_test(O_str out varchar2)exp user1/pwd@server owner=user1 file=c:\file.dmp
imp user2/pwd@server fromuser=user1 touser=user2 file=c:\file.dmp
as
       v_str      varchar2(20):=',';
       v_id       number;
       v_count    number;
       v_tmp      number :=0;
       v_money    number :=0;
begin
       
       select count(0) into v_count from t_money;
       loop
           select count(0) into v_count from t_money where not instr(v_str,',' || id || ',')>0 and amount <= 10-v_money;
           if v_count = 0 then
              exit;
              -- or restart
           end if;
           select id,amount into v_id,v_tmp from 
                  (select id,amount from t_money where not instr(v_str,',' || id || ',')>0 and amount <= 10-v_money order by dbms_random.value)
                where rownum <2;
           v_money := v_money + v_tmp;
           v_str := v_str || v_id ||',';
           exit when v_money =10;
       end loop;
       O_str := v_str;
       
       
       -- Error
end;

结果:,7,9,10,3,

转载于:https://www.cnblogs.com/fyonline/archive/2009/08/26/1554178.html

根据消费定额生成菜单的算法(原创)相关推荐

  1. [Qt] 迷宫随机生成和自动寻路算法、布局管理器、动态效果、界面切换、播放音频【迷宫、魔塔、超级玛丽】 -C++课程设计:Qt实现的迷宫与地牢游戏

    基于QT的迷宫与地牢小游戏开发 首先贴出链接: 完整Qt源码:点击进入https://download.csdn.net/download/qq_43365825/11852112 发布可执行程序:点 ...

  2. Menu详解(二):利用XML生成菜单和子菜单

    前言:上篇,我们说了有关代码生成菜单和子菜单的方法,这里我们再讲讲有关利用XML生成菜单和子菜单的问题. 业精于勤,荒于嬉,行成于思,毁于随 (日拱一卒) 系列文章: 1.<Menu详解(一): ...

  3. python如何生成excel文件_[原创] 如何用python3自动随机生成Excel文件内容

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 首先来看效果图 文件命名 文件内容 代码说明如下 import xlrd import xlwt from my_framework.log import ...

  4. 微信技术分享:微信的海量IM聊天消息序列号生成实践(算法原理篇)

    1.点评 对于IM系统来说,如何做到IM聊天消息离线差异拉取(差异拉取是为了节省流量).消息多端同步.消息顺序保证等,是典型的IM技术难点. 就像即时通讯网整理的以下IM开发干货系列一样: <I ...

  5. Django 权限管理-后台根据用户权限动态生成菜单

    Django权限管理 实现目标: 1.管理用户,添加角色,用户关联角色 2.添加权限.角色关联权限 3.添加动作.权限关联动作 4.添加菜单.权限关联菜单 实现动态生成用户权限菜单(可设置多级菜单嵌套 ...

  6. 封装各种生成唯一性ID算法的工具类

    /*** Copyright (c) 2005-2012 springside.org.cn** Licensed under the Apache License, Version 2.0 (the ...

  7. php制作随机地图,随机生成Roguelike游戏地图算法

    www.roguebasin.com 有很多相关的roguelike资料 相当有价值 首先随机生成一套地图世界有几个概念. 数据结构 1.world 2.map 3.room 4.corridor 地 ...

  8. TC字符界面-菜单程序【原创】

    TC字符界面-菜单程序[原创] 2008/03/06 22:58 /*本程序代码属本人原创,未经允许不得转载,谢谢合作 作者:HungryAnt 发布时间:2008-3-6 */ /*快捷键功能没有提 ...

  9. 把数字随机分成 php,php随机数 微信随机生成红包金额算法php版

    最近在研究发红包的功能,于是写了个红包的生成算法. 红包生成算法的需求 预先生成所有的红包还是一个请求随机生成一个红包 简单来说,就是把一个大整数m分解(直接以"分为单位,如1元即100)分 ...

  10. mysql的列生成下拉_ComboBox读取数据库生成下拉列表的算法简化

    一个VB 的优化案例 关劲松 PMP 关于测试软件,ComboBox读取数据库生成下拉列表的算法简化. 原有代码: 要遍历整个表的数据.使用了两次嵌套循环,加if判断,加标志位处理.而且代码繁复,不易 ...

最新文章

  1. redis高级-内存淘汰策略
  2. golang之iota
  3. 数字信号处理学习笔记(三)|时域离散系统的网络结构
  4. ubuntu16定时任务crontab
  5. qduoj - 今晚一起打CF吧——Codeforces,十三亿人的ACM梦。(排序背包)
  6. prototype.js ajax.request,javascript – Prototype和Ajax.Request范围
  7. 互联网产品一网易网站设计(思想)
  8. iOS 推送 获取手机设备的 deviceToken
  9. python引入redis_实操演练解读非关系型数据库—Redis
  10. python中object类的源码在哪里-[Python之路] object类中的特殊方法
  11. 新增修改BP客户/供应商
  12. iphone申请AppleID后无法登陆App Store
  13. 服务器机箱销售跑哪些地方,网购主机老出问题?其实你早已上当受骗,这些猫腻很多人都不知道...
  14. 2022华为机试真题 C++ 实现【统计射击比赛成绩】
  15. 13.2-“制作一款私有IAP串口下载小工具”之串口IAP的通信协议设计
  16. 超纯水制备树脂MB-115、MB-106UP产水18.25兆欧
  17. 蓝桥杯 试题 B: 纪念日
  18. GIS是个什么鬼,真的开眼了。感谢好学生的奉献。
  19. LiveMe x TiDB丨单表数据量 39 亿条,简化架构新体验
  20. 二、LoRaWAN Gateway【LoRaWAN实战项目】

热门文章

  1. 架构之美-读书笔记之二
  2. easyui下拉框和增加以及商品的上架和下架
  3. H.264 AVC 编解码标准
  4. iOS 蓝牙开发中数据收发的坑
  5. MTK平台手机刷机工具分享
  6. 基于ResNet迁移学习的LFW人脸识别分类
  7. 版本Android型号vivo 6D版,vivox6d和x6a参数
  8. 网易云计算机系统有限公司,网易云音乐官方电脑版
  9. ark服务器修改龙属性代码,方舟生存进化修改恐龙颜色指令代码
  10. 计算机408考研 思维导图 知识整理