10: 编写一个算命的过程,接收输入的一个生日(yyyymmdd),每2位相加取个位,最后得到一位数字,此数字为偶数(命好),为质数(一般),否则为(命运悲惨).算法如下;
19850324
 0735356
  708881
   78669
    5425
     967
      53
       8  -------------------偶数,命好

解决方案 »

  1.   

    SQL> CREATE OR REPLACE PROCEDURE calc(i_birth VARCHAR2) IS
      2    s VARCHAR2(8);
      3    o VARCHAR2(8);
      4    PROCEDURE cc(num VARCHAR2, s OUT VARCHAR2) IS
      5    BEGIN
      6      FOR i IN REVERSE 2 .. length(num) LOOP
      7        s := s || substr(substr(num, i, 1) + substr(num, i - 1, 1), -1);
      8      END LOOP;
      9      SELECT REVERSE(s) INTO s FROM dual;
     10    END;
     11  BEGIN
     12    o := i_birth;
     13    LOOP
     14      cc(o, s);
     15      o := s;
     16      dbms_output.put_line(s);
     17      EXIT WHEN length(o) < 2;
     18    END LOOP;
     19  END;
     20  /
     
    Procedure created
     
    SQL> set serveroutput on;
    SQL> exec calc('19850324');
     
    0735356
    708881
    78669
    5425
    967
    53
    8
     
    PL/SQL procedure successfully completed
     
    SQL> 
      

  2.   

    用PL/SQL 算命,古老的占卜与现代科技的完美结合,哈哈
      

  3.   

    with t as
     (select '19850324' x from dual)select case when mod (i, 2) = 0 then '命好' when i = 9 then '命运悲惨' else '一般' end result
      from (select mod(sum((to_number(substr(x, level, 1)) +
                           to_number(substr(x, -level, 1))) *
                           greatest(((level - 1) * 2 - 1) * 7, 1)),
                       10) i
              from t
            connect by level <= 4);