我想写个触发器 实现下面的功能 我有一个student表 里面有学号 姓名和出生日期 我想通过查询语句查询一个人 要他输出来有他的年龄  年龄是由 系统日期减去生日得到 要求整数 望各位帮帮忙 小弟在此谢谢了

解决方案 »

  1.   


    --给你一个计算年龄的方法吧
    -------------------------------------------
      --取得年龄精确到月
      -------------------------------------------
      FUNCTION GET_NL_MONTH(V_YEAR   IN NUMBER,
                            V_MON    IN NUMBER,
                            V_AAC006 IN VARCHAR2) RETURN NUMBER IS
        RESULT NUMBER;
        V_FLAG NUMBER DEFAULT 0;
      BEGIN
        BEGIN
          IF V_MON >= TO_NUMBER(SUBSTR(V_AAC006, 5, 2)) THEN
            V_FLAG := 1;
          END IF;
          RESULT := V_YEAR - TO_NUMBER(SUBSTR(V_AAC006, 1, 4)) + V_FLAG;
        EXCEPTION
          WHEN OTHERS THEN
            RESULT := 40;
        END;
        RETURN(RESULT);
      END;
    其中V_AAC006为出生日期,V_YEAR可改为系统当前年,V_MON可改为系统当前月,lz的需求可以将v_year与v_mon作为一个字段传入
      

  2.   

    你这个问题因该是用函数来解决的~
    我能帮你写这样一个函数,比如函数名称叫NL(),
    你调用的时候
    select no,name,birthday ,nl(birthday) from student 
    --返回
    001  李四 1980-10-01 28
    需要吗?
      

  3.   

    很少用触发器,刚想试着去写,发现没有select的触发器啊
      

  4.   

    呵,支持,lz可以用我一楼写的函数,然后直接
    select no,name,birthday ,GET_NL_MONTH(to_number(substr(to_char(sysdate,'yyyymm')),1,4),to_number(substr(to_char(sysdate,'yyyymm')),5,2),birthday) from student 就可得到你想要的结果
      

  5.   

    这个东西要用触发器吗。
    直接一条语句不久实现吗
    select (sysdate-birth_date) from student where name='xx'
      

  6.   

    方法都已经写出来了,还不会用啊,直接在plsql中新建一个方法,把我写的那个function贴上去,按f8执行,然后在sql窗体执行select no,name,birthday ,GET_NL_MONTH(to_number(substr(to_char(sysdate,'yyyymm')),1,4),to_number(substr(to_char(sysdate,'yyyymm')),5,2),birthday) from student这句sql
      

  7.   


    --建表
    create table AA1
    (
      NUM      NUMBER,
      NAME     VARCHAR2(10),
      BIRTHDAY DATE
    )
    ------------
    select * from aa1;
    1 王五 1982-6-1
    ------函数
    create or replace function test003(birthday in date) return number is
    age number;begin
    age:=to_char(sysdate,'yyyy')-to_char(birthday,'yyyy');
    return(age);
    end;
    --调用函数
    select num,name,birthday,test003(birthday) as age from aa1
    --显示结果
    1 王五 1982-6-1 26