可以通过判断flag的值来判断存储过程是不是成功,你的存储过程哪里不行啊?

解决方案 »

  1.   

    我是通过它呀,我执行存储过程时,有4个in,一个out的,可是运行时就报错,去掉out就好使,可以给个demo吗,有out参数的,谢谢我的本意也是根据flag来的,可是运行报错下面是运行结果
    SQL> exec dealbill1 ('EC0006','20010101','20060101',8);
    BEGIN dealbill1 ('EC0006','20010101','20060101',8); END;      *
    ERROR 位于第 1 行:
    ORA-06550: 第 1 行, 第 7 列:
    PLS-00306: 调用 'DEALBILL1' 时参数个数或类型错误
    ORA-06550: 第 1 行, 第 7 列:
    PL/SQL: Statement ignored怎么办呀
      

  2.   

    demo:
    CREATE OR REPLACE PROCEDURE Fun_Get_Diff (
       ais_str1    IN       VARCHAR2,
       ais_str2    IN       VARCHAR2,
       aos_same    OUT      VARCHAR2,
       aos_diff1   OUT      VARCHAR2,
       aos_diff2   OUT      VARCHAR2
    )
    /********************************************************
     * 名称:fun_get_diff                                    *
     * 说明:比较两个字符串同位置的差异                      *
     * 作者:coco                                            *
     * 创建日期: 2005年05月26日 16:37:30                    *
     * 输入参数:                                            *
     *           ais_str1    输入字符串1                     *
     *           ais_str2    输入字符串2                     *
     * 输出参数:                                            *
     *           aos_same    两个字符串中的相同部分。        *
     *           aos_diff1   字符串1(ais_str1)中的不同部分 *
     *           aos_diff2   字符串1(ais_str2)中的不同部分 *
     *********************************************************/
    AS
    vi_len1                 NUMBER(40);
    vi_len2                 NUMBER(40);
    vi_len                  NUMBER(40);
    vi_circle               NUMBER(40);   
    vs_str1                 VARCHAR2(100);
    vs_str2                 VARCHAR2(100);   BEGIN
       vi_len1 := NVL(LENGTH(ais_str1),0);
       vi_len2 := NVL(LENGTH(ais_str2),0);
       vi_len  := LEAST(vi_len1,vi_len2);
        aos_same:=(CASE
                      WHEN vi_len1 = vi_len
                      THEN ais_str1
                      ELSE ais_str2
                      END);
        aos_diff1:='';
        aos_diff2:='';
          FOR vi_circle IN 1 .. vi_len LOOP
          vs_str1:=SUBSTR(ais_str1,vi_circle,1);
          vs_str2:=SUBSTR(ais_str2,vi_circle,1);
          
          IF vs_str1 != vs_str2 THEN
          aos_same   :=  SUBSTR(ais_str1,1,vi_circle-1);
          aos_diff1  :=  SUBSTR(ais_str1,vi_circle);
          aos_diff2  :=  SUBSTR(ais_str2,vi_circle);
          RETURN;
          END IF;
          END LOOP;
          RETURN;
     END;
      

  3.   

    SQL> exec dealbill1 ('EC0006','20010101','20060101',8);
    -----
    你要定义返回值
    sql>var outflag number
    sql>exec dealbill1 ('EC0006','20010101','20060101',8,:outflag);
    sql>print outflag