求一段Orale PL/SQL程序,可实现:
 在下述表里找出参与相加后和为已知值的纪录,
并把该纪录的Status设为1例:已知值是25、表如下、最初Status全设为0、PL/SQL程序执行后:
recode sale status
------ ---- ------
001    2    0
002    5    1
003    10   1
004    5    0
005    10   1

解决方案 »

  1.   

    就运行一次!004不可以用, 若004用了,在加005就多了5,表中的sale数是不可分割的
      

  2.   

    已解决,1小时后结贴。
    请各位再看看我的另一个问题,谢谢了。!!!!另一PL/SQL简单的Select问题,关于传入参数查询  
    http://topic.csdn.net/u/20090114/15/8fc57fc6-34a7-40dc-bcb7-a80f443bb637.html
      

  3.   

    楼上的高人,
    按照这个运行出来的结果是:
    name    num    state 
    a        2        0 
    b        4        0 
    c        7        1 
    d        10       0 
    e        10       0 
    f        28       0 
    g        9        0 
    h        18       1
    按照小号优先的原则,正确的结果应当是:
    name    num    state 
    a        2        1 
    b        4        1 
    c        7        0
    d        10       1 
    e        10       0 
    f        28       0 
    g        9        1 
    h        18       0
    才对吧,你再看看是咋回事
      

  4.   

    select t.id, t.num from a1 t where t.num = 25;--相当于求解Cm1=25
    select t.id, t1.id, t.num + t1.num su
      from a1 t, a1 t1
     where t1.id > t.id
       and t.num + t1.num = 25;--相当于求解Cm2=25select t.id, t1.id, t2.id, t.num + t1.num + t2.num su
      from a1 t, a1 t1, a1 t2
     where t1.id > t.id
       and t2.id > t1.id
       and t.num + t1.num + t2.num = 25;--相当于求解Cm3=25一个思路,其中一个满足就exit有必要多写几个
      

  5.   

    应该是第二层循环前的查询  排序的问题,把查询时候的ORDER BY 都加个 DESC应该就行了
      

  6.   

    谢谢诸位的参与,谢谢xanaduwpz老大!学生不才,没明白xanaduwpz老大在PL/SQL程序中对state的设定的意图
    state的3,4,5,6各代表什么意思?
    能不能说说主要思路?
      

  7.   


    就是控制循环,刚开始就想到加3和4,后来控制不了,又添加的5,6
    name    num    state 
    a        2        0 
    b        4        0 
    c        7        0 
    d        10      0 
    e        10      0 
    f        28      0 
    g        9        0 
    h        18      0 
    先排序,用最小的数2开始加,一个个数的加,参与相加的数都把state设成2,超过指定数25了,设成3
    第一次没找到,就把状态为2的最大的一个数的state改成4,把状态为3的都给回成0,重新加当state还剩两个2的时候,把比较大的改成5,继续循环,如果没有,把最后一个状态是2的改成6,下次循环的时候不再使用改数字,说明这个数跟所有其他数字加起来都不满足要求.然后重新开始再循环,直到找到指定的值写不清楚,你可以加我qq270332164,我一般晚上8点以后在线.
      

  8.   

    我最后选择用VB的递归调用实现的再次谢谢xanaduwpz老大!