要求如下:输入参数:长度为6位的字符串
输出参数:1、过程是否执行成功标志(成功1,失败0)
          2、长度为20位的字符串,格式为 YYYYMMDD+输入参数+随机数,其中YYYYMMDD为系统当前日期说明: 只创建该存储过程,不要对该用户下的过程、表等做其他操作我是这方面的菜鸟,能帮我说明白的这例子的追加50分!

解决方案 »

  1.   

    CREATE OR REPLACE Procedure Zl
    (
      v_In  varchar(6) ,
      ) return varchar(1),char(20)
    is 
      

  2.   

    CREATE OR REPLACE PROCEDURE sp_test(
       in_string  IN   varchar(2),                            
       out_string  out   varchar(2),                         
       flag        out  number                             
    )
    ISBEGIN
      out_string=to_char(sysdate,'yyyymmdd')||in_staring||to_char(trunc(dbms_random.value(1,100)))
      flag:=1
    EXCEPTION
       WHEN NO_DATA_FOUND
       THEN
          NULL;
       WHEN OTHERS
       THEN
          -- Consider logging the error and then re-raise
          return flag:=0;
    END sp_test;
      

  3.   


    SQL> create or replace procedure sp_test(
      2      para_in in varchar2,
      3      para_out_flag out integer,
      4      para_out_char out varchar2
      5   )
      6  is
      7  begin
      8    BEGIN
      9      para_out_flag := 1;
     10      para_out_char := to_char(sysdate,'yyyymmdd')||para_in||trunc(dbms_random.value(1000000,0));
     11    exception when OTHERS THEN
     12      para_out_flag := 0;
     13    END;
     14  end;
     15  /Procedure createdSQL> 
    SQL> declare
      2   p_out_flag integer;
      3   p_out_char varchar2(20);
      4  begin
      5    sp_test('abcdef',p_out_flag,p_out_char);
      6    dbms_output.put_line(p_out_flag);
      7    dbms_output.put_line(p_out_char);
      8  end;
      9  /1
    20081007abcdef89969PL/SQL procedure successfully completed
      

  4.   


    create or replace procedure testA(in_var   varchar2, --输入参数
                                      out_var1 out number, --输出参数
                                      out_var2 out varchar2 --输出参数
                                      ) as
    begin  out_var1 := 1;
      out_var2 := to_char(sysdate, 'YYYYMMDD') || in_var ||
                  lpad(mod(abs(dbms_random.random), 1000000), 6, '0');
    exception
      when others then
        out_var1 := 0;
    end;
    /
      

  5.   

    哇,2楼的高手啊,崇拜!因为我在这方面是很菜很菜的,所以我还有些疑问想问一下啊!望你解惑!谢谢
    CREATE OR REPLACE PROCEDURE sp_test(
       in_string  IN   varchar(2),     --这里是不是应该是 varcha(6) 啊!                       
       out_string  out   varchar(2),   --这里是不是应该是 varcha(20) 啊!                       
                          
       flag        out  number                             
    )
    ISBEGIN
      out_string=to_char(sysdate,'yyyymmdd')||in_staring||to_char(trunc(dbms_random.value(1,100)))
      flag:=1  --“||”是不是相当于连接的意思啊
    EXCEPTION
       WHEN NO_DATA_FOUND
       THEN
          NULL;  --此时退出,过程还是算成功完成吗
       WHEN OTHERS
       THEN
          -- Consider logging the error and then re-raise
          return flag:=0;
    END sp_test;
     顺便想问下in_n IN number(5) 是in_n被赋值为5的意思吗                          
      

  6.   

    hebo2005只是给你个例子,其他的根据你自己需求而定。自己GOOGLE就明白了。
      

  7.   

    那是写错了
    应该是varchar2
      

  8.   

    都是高手啊,汗!
    刚才调试了下,发现2楼的有问题,呵呵,还有有4楼那位大哥的参照,被我调试出来啦,
    刚查了下,但还有些小问题,不知道那位高手能帮我解决。1.trunc是什么意思啊2.dbms_random.value(1,100)与dbms_random.value(100,1)有什么区别啊,怎么感觉都一样啊3.dbms_random.value与dbms_random.random有什么区别啊4.有没有什么办法一定要让我输入长度为6位的字符串参数啊5.那个bigin前用is和用as有什么区别没啊由于昨天才开始接触这些东西,问题真的很多,希望高手们别烦啊,请高手们知道的话帮我解答一下啊,答者有分!
      

  9.   

    在eclipse下,java类如何连接数据库并调用一写好的存储过程 
    知道的高手帮我看看啊!(刚发的)
    http://topic.csdn.net/u/20081007/11/de3f0917-ae43-4335-aee0-bd4f5649366a.html问题解决就结贴!
      

  10.   

    1、trunc是取整函数
    2、都一样
    3、两个都是dbms_random包下的函数但参数不同
    4、可以
      

  11.   

    我也很菜,不过这个问题我可以回答你,是定义了一个输入参数,类型为number,长度为5
      

  12.   

    昨天,好像这帖子打不开,郁闷
    还有2个小问题:
    望高人解答!
    1.用什么办法一定要让我输入长度为6位的字符串参数啊 (希望给出具体语句啊)
    2.in_n IN number(5) 是 类型为number,长度为5 --这里的5是指什么啊,是指该变量最多可以存放5个数,还是最大只能存放5位数啊不管该问题是否解答,今中午前结贴,在此谢谢上面这些朋友帮忙啦
      

  13.   


    CREATE OR REPLACE PROCEDURE p_test(P_I_STR  IN VARCHAR2,
                                     P_O_STR  OUT VARCHAR2,
                                     P_O_FLAG OUT NUMBER) IS
    l_str VARCHAR2(100);                                 
    BEGIN
      IF P_I_STR IS NULL THEN
       raise_application_error(-20099, '参数错误');
      ELSIF LENGTHB(TRIM(P_I_STR)) > 6 THEN
        l_str := SUBSTR(TRIM(P_I_STR), 1, 6);
      ELSE
        l_str := LPAD(P_I_STR, 6, '*');
      END IF;
      P_O_STR  := TO_CHAR(SYSDATE, 'yyyymmdd') || l_str ||
                  SUBSTR(ABS(DBMS_RANDOM.RANDOM), 1, 6);
      P_O_FLAG := 1;
    EXCEPTION
      WHEN OTHERS THEN
        P_O_STR  := SUBSTRb(Sqlerrm, 1, 20);
        P_O_FLAG := 0;
    END;
    /
    DECLARE
      L_STR VARCHAR2(20);
      L_NUM NUMBER;
    BEGIN
      P_TEST('aa', L_STR, L_NUM);
      DBMS_OUTPUT.PUT_LINE(L_STR || '   ' || L_NUM);
      P_TEST('aaaaaa', L_STR, L_NUM);
      DBMS_OUTPUT.PUT_LINE(L_STR || '   ' || L_NUM);
      P_TEST('aaabbbccc', L_STR, L_NUM);
      DBMS_OUTPUT.PUT_LINE(L_STR || '   ' || L_NUM);
      P_TEST('', L_STR, L_NUM);
      DBMS_OUTPUT.PUT_LINE(L_STR || '   ' || L_NUM);
      P_TEST(NULL, L_STR, L_NUM);
      DBMS_OUTPUT.PUT_LINE(L_STR || '   ' || L_NUM);
    END;
    /
    输出:
    20081008****aa140275   1
    20081008aaaaaa168284   1
    20081008aaabbb156518   1
    ORA-20099: 参数错误   0
    ORA-20099: 参数错误   0
      

  14.   

    改一下三楼星星的过程
    CREATE OR REPLACE PROCEDURE P_GET_DATE(
       in_string  IN   varchar(6),                            
       out_string  out   varchar(20),                         
       flag        out  number                             
    )
    ISBEGIN
      out_string=to_char(sysdate,'yyyymmdd')||in_staring||to_char(trunc(dbms_random.value(1,100)))
      flag:=1
    EXCEPTION
       WHEN NO_DATA_FOUND
       THEN
          NULL;
       WHEN OTHERS
       THEN
          -- Consider logging the error and then re-raise
          return flag:=0;
    END P_GET_DATE;
      

  15.   

    1上面给你解答了
    2高手们不屑解答我是菜鸟给你解答哈哈
    number(5)五位不是5个最多只能5位
      

  16.   

    其实很多问题可以自己测试象number(5)
    你不可以建立一个字段输入值测试么??
      

  17.   

    最终的结果与解释!!create or replace procedure sp_test(
            para_in in varchar2,
            para_out_flag out integer,
            para_out_char out varchar2
         )
        is
    BEGIN
           if length(para_in)=6 then --输入参数6位才做连接操作并同过输出参数para_out_flag 告之成功
           para_out_char := to_char(sysdate,'yyyymmdd')||para_in||trunc(dbms_random.value(100000,999999));--随机数的6位限制小学生都会
        para_out_flag := 1;
        elsif length(para_in)!=6 then --长度不等于6的不做连接操作只同过输出参数para_out_flag告之异常
        para_out_flag := 0;
        end if;
        END;
    set serveroutput on
    SQL> declare
      2  p_out_flag integer;
      3  p_out_char varchar2(20);
      4  begin
      5  sp_test('456',p_out_flag,p_out_char);
      6  dbms_output.put_line(p_out_char ||'   '||p_out_flag);
      7  end;
      8  /
    0
    当长度不等于6的时候p_out_flag为0,那么为什么我要求输出p_out_char 确没值,这就涉及上面的过程 因为我在长度不为6只做输出p_out_char 那为什么还要dbms_output.put_line(p_out_char ||'   '||p_out_flag);这样写
    我只是要实现代码重用而已。
    PL/SQL 过程已成功完成。
    declare
    p_out_flag integer;
    p_out_char varchar2(20);
    begin
    sp_test('123456',p_out_flag,p_out_char);
    dbms_output.put_line(p_out_char ||'   '||p_out_flag);
    end;
    /
    20081008123456429602   1PL/SQL 过程已成功完成。
      

  18.   

    完了分已经分了
    我刚测试好!!
    SQL中存储过程(有输入参数/输出参数)  [已结帖,结帖人:cc41577]
      
     加为好友 
    发送私信 
    在线聊天
    cc41577 
    cc41577 
    等级: 
    可用分等级:贫农 
    总技术分:75 
    总技术分排名:120856 
    结帖率:77.78%  发表于:2008-10-07 08:39:34 楼主 
    要求如下: 输入参数:长度为6位的字符串 
    输出参数:1、过程是否执行成功标志(成功1,失败0) 
              2、长度为20位的字符串,格式为 YYYYMMDD+输入参数+随机数,其中YYYYMMDD为系统当前日期 说明: 只创建该存储过程,不要对该用户下的过程、表等做其他操作 我是这方面的菜鸟,能帮我说明白的这例子的追加50分! 给我再加50分