数据库中的某个字段的值为:10/100
我想写一个函数10/100是否大于60%,如果大于则返回字符串“合格”否则为“不合格”
按如下格式怎么写?
--传入一个字符串“50/100”返回“不及格”,分割/得出50和100,用50/100得到的值>60%则及格否则不及格
create or replace function NLPG_IsPass(str1 in varchar2) return varchar2 is
  Result varchar2(10);
begin  return(Result);
end NLPG_IsPass;

解决方案 »

  1.   

    create or replace function NLPG_IsPass(str1 in varchar2) return varchar2 is
      Result varchar2(10);
      temp_num number(2,4);
    begin
      execute immediate 'select '||str1||' from dual ' into temp_num ;
      if temp_num>=0.6 then 
         Result:='合格';
      else 
        Result:='不合格';
      end if ;
      return(Result);
    end NLPG_IsPass;
      

  2.   

    create or replace function NLPG_IsPass(str1 in varchar2) return varchar2
    is
      strResult varchar2(10);
      strSQL varchar2(100);
      TYPE TP_REC IS REF CURSOR;
      VAR_REC TP_REC;
    begin
      OPEN VAR_REC FOR 'SELECT 1 FROM DUAL WHERE ' || str1 || ' >= 0.6';
      FETCH VAR_REC INTO strResult;
      CLOSE VAR_REC;
      --/*
      IF NVL(strResult, 0) = 0 THEN
        strResult := 'FAILURE';
      ELSE
        strResult := 'OK';
      END IF;
      --*/
      return strResult;
    end NLPG_IsPass;
      

  3.   

    /* Formatted on 2008/11/18 19:53 (Formatter Plus v4.8.8) */
    CREATE OR REPLACE FUNCTION nlpg_ispass (str1 IN VARCHAR2)
       RETURN VARCHAR2
    IS
       RESULT     VARCHAR2 (10);
       temp_num   NUMBER (6, 4);
    BEGIN
       EXECUTE IMMEDIATE 'select '||str1||' from dual'
                    INTO temp_num;   IF temp_num >= 0.6
       THEN
          RESULT := '合格';
       ELSE
          RESULT := '不合格';
       END IF;   RETURN (RESULT);
    END nlpg_ispass;select nlpg_ispass ('50/100') from dual结果
    不合格select nlpg_ispass ('60/100') from dual结果
    合格
      

  4.   


    select decode(sign(column-0.6),-1,'不合格','合格') from dual
    0.5 不合格
    0.6 合格
    0.8 合格
      

  5.   

    select decode(sign('50/100'-0.6),-1,'不合格','合格') from dual错误1722 无效的数字
      

  6.   

    能告诉我Execute IMMEDIATE 的含义吗
      

  7.   

    还有就是如果传入的str1为空的话,怎么判断为不及格
      

  8.   


    只是提供一种不用IF/ELSE的参考!放到 EXECUTE IMMEDIATE 里总可以用吧!
      

  9.   

    YUN,我用同样的方法做加法居然没人认可,真的悲哀!
      

  10.   

    http://topic.csdn.net/u/20081112/14/01cc81b7-3a87-4a71-802d-d3457a57ef71.html
    yun,我用同样的方法做加法居然没有人认可,真的悲哀!
      

  11.   

    -- 一条sql就可以搞定的.
    SQL> select bfb,
      2         case
      3           when (substr(bfb, 1, instr(bfb, '/') - 1) < 60) then
      4            '不合格'
      5           else
      6            '合格'
      7         end 判断结果
      8    from test;BFB        判断结果
    ---------- --------
    10/100     不合格
    70/100     合格SQL> 
      

  12.   

    还有就是如果传入的str1为空的话,怎么判断为不及格
    还有就是如果传入的str1为空的话,怎么判断为不及格
    还有就是如果传入的str1为空的话,怎么判断为不及格
      

  13.   


    create or replace function NLPG_IsPass(str1 in varchar2) return varchar2 is
      Result varchar2(10);
      temp_num number(2,4);
    begin
       if str1 is  not null then
      begin
      execute immediate 'select '||str1||' from dual ' into temp_num ;
      if temp_num>=0.6 then 
         Result:='合格';
      else 
        Result:='不合格';
      end if ;
      end;
      else  
      Result:='不合格';
      end if;
      return(Result);  
    end NLPG_IsPass;我大部分代码是抄袭hebo2005的,特此声明