急问 :
为什么我在存储过程里面用不了  case...when...then...end 语句
如果使用不了这种语句, 如何在select 语句里面实现类似这种结构,就是要在
select 的时候加条件判断 用函数吗? 好像太繁琐
我的oracle版本是817

解决方案 »

  1.   

    9中
    select 
    case
     when A<10 then 1
     when A>=10 then 2end
    from ...
    也可以decode
      

  2.   

    Decode函数的语法结构如下:decode (expression, search_1, result_1)
    decode (expression, search_1, result_1, search_2, result_2)
    decode (expression, search_1, result_1, search_2, result_2, ...., search_n, result_n)decode (expression, search_1, result_1, default)
    decode (expression, search_1, result_1, search_2, result_2, default)
    decode (expression, search_1, result_1, search_2, result_2, ...., search_n, result_n, default)
      

  3.   

    例子
    SELECT CASE 
       WHEN (SUM(plan_quantity-NVL(actual_quantity,0))>=p_qty) THEN 1
       ELSE 0
       END
    INTO v_return
    FROM t_store_out_instructions 
    WHERE product_id=p_product_id
    AND store_to=p_store_to;
      

  4.   

    但是 decode 只能做等值转换
    好像   decode(a,1,'true',false);
    if(a=1) then 'true' else 'false' end;
    我要实现的是条件转换 
    if a>1 then ..... else .... end ;
    如何来做呢
      

  5.   

    我写的 case when 语句的语法是没有问题的 在sql 窗口 可以执行  
    但是在存储过程里面 open cursor for select .... 的时候 就要报语法错误
      

  6.   

    declare
    cursor cur_roleid is SELECT CASE 
       WHEN (SUM(plan_quantity-NVL(actual_quantity,0))>=0) THEN 1
       ELSE 0
       END
    FROM t_store_out_instructions ;
    begin
    OPEN cur_roleid;
    ....
    end ;这样没问题
      

  7.   

    你的错误可能不再case 而在别的地方把
      

  8.   

    楼上各位究竟仔细看过题目没有啊?CASE WHEN 和 DECODE 固然是用来判断的,但是在plsql中是不允许用的。对于这种情况,需要用 plsql 的语法:IF ... THENELSIF ... THENELSEEND;
      

  9.   

    boydgmx(授人以鱼不如授人以渔(baidu&google)) ( ) 信誉:120  2006-02-23 14:03:00  得分: 0  CASE WHEN 和 DECODE 固然是用来判断的,但是在plsql中是不允许用的。
    ---------
    你说得我不明白case 不放在select中也可以阿
    而且我的存储过程可以用case阿
    (我是菜鸟,别见怪)
      

  10.   

    cenlmmx(学海无涯苦作舟) 说的方法的确可行 
    小弟还有一问 就是存储过程里面 用select 语句的时候 在select 的字段里面 也使用了
    select 语句 单独执行sql 都是对的 但是执行存储过程open cursor for select 这行会报错 这种问题如何解决呢 
      

  11.   

    CREATE OR REPLACE PROCEDURE lll
    IS
    cursor cur_roleid is SELECT CASE 
       WHEN (SUM(plan_quantity-NVL(actual_quantity,0))>=0) THEN 1
       ELSE 0
       END
    FROM t_store_out_instructions ;
    begin
    OPEN cur_roleid;end ;没有错误啊
      

  12.   

    所以还是建议用简单的
    SELECT 需要判断的字段 INTO rs FROM ...;然后用IF rs>0 THENELSIF ... THENELSEEND IF;这种方式来判断最保险了。要不就之得升级到9了
      

  13.   

    cenlmmx(学海无涯苦作舟) 谢谢大家的帮助
    偶也是没办法 公司一直用的都是这个版本 
    msn [email protected]
    qq 15715807