数据库中的某个字段的值为: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;
我想写一个函数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;
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;
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;
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结果
合格
select decode(sign(column-0.6),-1,'不合格','合格') from dual
0.5 不合格
0.6 合格
0.8 合格
只是提供一种不用IF/ELSE的参考!放到 EXECUTE IMMEDIATE 里总可以用吧!
yun,我用同样的方法做加法居然没有人认可,真的悲哀!
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>
还有就是如果传入的str1为空的话,怎么判断为不及格
还有就是如果传入的str1为空的话,怎么判断为不及格
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的,特此声明