在去年一个实验性项目中有这样一个问题,饭店根据顾客消费意愿进行菜单自动生成,如: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. XamarinAndroid组件教程设置自定义子元素动画(一)
  2. NASM中SECTION的概念
  3. 实验室服务器18.04LTS+RTX2080Ti+CUDA10.0+CUDAnn7.4+tf1.13装机之路
  4. java长连接socket【转】http://jiewo.iteye.com/blog/1562168
  5. 【ZOJ - 2972】Hurdles of 110m (dp)
  6. Win7平台下配置Sublime Text2 的C++编译环境
  7. 普通摄像头游戏——空中飞车
  8. 计算机金融sci,FINANCE AND STOCHASTICS《金融与随机分析》SSCI论文投稿_SSCI期刊大全_SSCI期刊点评_万维书刊网...
  9. centos7 部署dzzoffice最新版详细教程
  10. Greasy Fork 视频网页全屏脚本
  11. js清除网页广告代码
  12. 口算题自动生成小工具
  13. java 中文词性标注_使用opennlp进行词性标注
  14. CVPR 2021 Oral | Transformer再发力!华南理工和微信提出UP-DETR:无监督预训练检测器...
  15. vim中,c/cpp文件如何在头文件和.c/.cpp文件中快速的进行跳转
  16. part1:推荐一些适合练手、课程设计、毕业设计的python小项目源码,无任何下载门槛
  17. Ubuntu 18.04.x LTS及以上版本设置链路聚合网络
  18. cherry蓝牙键盘如何锁定win键
  19. 多轴机器人简图_串联机器人的基本结构形式、结构简图和工作空间
  20. php xml expat,php 使用expat方式解析xml文件操作示例

热门文章

  1. dnSpy反编译EXE或DLL
  2. H.264/AVC原理介绍
  3. 如何在地址栏显示图标
  4. ESD二极管,SOT-23封装型号大全
  5. tomcat内存溢出全记录
  6. matlab热应力计算,Matlab在齿轮应力计算中的应用
  7. Visual Studio2022 离线安装包下载
  8. UCI数据集汇总及描述
  9. python实现邻接矩阵转邻接表
  10. macbook excel导入html,mac版本怎么把网页数据导入Excel