oracle 判断条件问题

我在用plsql写的存储过程中,遇到if的判断条件是个子字符串,如:v_tiaojianvarchar2(20);v_tiaojian:='1240<1400and124... 我在用plsql写的存储过程中 ,遇到if的判断条件是个子字符串,如:
v_tiaojian varchar2(20);
v_tiaojian :='1240<1400 and 1240>1000';
if v_tiaojian then
....
在执行时会报变量类型错误 请问如何将字符串变为if的判断条件。
展开
 我来答
badkano
2013-11-26 · 知道合伙人体育行家
badkano
知道合伙人体育行家
采纳数:144777 获赞数:885359
团长

向TA提问 私信TA
展开全部
declare
v_tiaojian varchar2(100);
begin
v_tiaojian :='1240<1400 and 1240>1000';
if  v_tiaojian is not null then
  dbms_output.put_line('成功');
end if;
end;

 

类似这样

if判断的是true或者false

---------补充----------

貌似这样也行

declare
V_Tiaojian Varchar2(100);
b boolean;
Begin
V_Tiaojian :='1240<1400';
execute immediate ('select count(*) from dual where '||v_Tiaojian) into b;
if  b then  
  dbms_output.put_line('成功');
End If;
end;
sxdtgsh
2013-11-26 · TA获得超过2221个赞
知道小有建树答主
回答量:913
采纳率:75%
帮助的人:797万
展开全部

1、创建函数CheckCondition

create or replace function CheckCondition(vCondition in varchar2) return Integer is
  iCurID  Integer; 
  iResult Integer;
  vSql varchar2(2000);
  iC Integer;
begin
  if vCondition is null then
    Return 1;     -- 条件成立
  end if;
 vSql := 'select Count(1) as C from dual where ' || vCondition;
  iCurID:= Dbms_Sql.Open_Cursor;
  Dbms_Sql.Parse(iCurID, vSql, Dbms_Sql.V7); 
  Dbms_Sql.Define_Column(iCurID, 1, iC);   
  iResult:= Dbms_Sql.Execute(iCurID);
  if Dbms_Sql.Fetch_Rows(iCurID) > 0 then
    Dbms_Sql.Column_Value(iCurID, 1, iC);
  else
    ic:= -1;  
  end if;  
  Dbms_Sql.Close_Cursor(iCurID);
  Return iC;
exception
   when others then
    dbms_output.put_line(sqlerrm);
     Return -2;
end;
/
2、改写你的代码
v_tiaojian varchar2(20);
v_tiaojian :='1240<1400 and 1240>1000';
i_CheckCond Integer;
i_CheckCond:= CheckCondition(v_tiaojian);
if i_CheckCond = 1 then    --  条件成立
...
else if i_CheckCond = 0 then -- 条件不成立
...
else   -- 条件语句有问题
...
end if;

 希望对你有所帮助。

追问
谢谢你费心的解答!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
Kingboo_cn
2013-11-26
知道答主
回答量:27
采纳率:0%
帮助的人:10万
展开全部
IF要判断的表达式或变量应该是个逻辑值 ,你现在给他的是个字符,你应该把变量v_tiaojian声明成boolean,
v_tiaojian Boolean ;
v_tiaojian := 1240<1400 and 1240>1000;
if (v_tiaojian) then
...
这样应该就可以了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式