解决方案 »

  1.   

    OUT 参数作用是可以在过程内部或函数内部修改过程外面参数的值
    下面是一个  OUT   与  IN OUT  参数使用的例子。SQL> CREATE OR REPLACE PROCEDURE HelloWorld2 (
    2    p_user_name IN     VARCHAR2,
    3    p_out_val   OUT    VARCHAR2,
    4    p_inout_val IN OUT VARCHAR2
    5 ) AS
    6 BEGIN
    7     dbms_output.put_line('Hello ' || p_user_name || p_inout_val || '!');
    8     p_out_val := 'A';
    9     p_inout_val := 'B';
    10 END HelloWorld2;
    11 /Procedure created.SQL> DECLARE
    2    p_outval VARCHAR2(10);
    3    p_inoutval VARCHAR2(10) := '~Hi~';
    4 BEGIN
    5    HelloWorld2('Edward', p_outval, p_inoutval);
    6
    7    dbms_output.put_line('p_outval=' || p_outval);
    8    dbms_output.put_line('p_inoutval=' || p_inoutval);
    9 END;
    10 /
    Hello Edward~Hi~!
    p_outval=A
    p_inoutval=BPL/SQL procedure successfully completed.
      

  2.   

    从外面的参数值传入,经过函数之后 ,在或者这个参数,就可以得到。 
    一般来说 ,函数 获取return的值
      

  3.   

    function 只能返回一个值,如果需要返回多个值,就需要用out型参数
      

  4.   

    同意大家说的关于out参数的作用回答你第二个问题
    mybatis配置statementType="CALLABLE" 然后{call 存储过程}
    实现JDBC的CallableStatement接口,调用存储过程
      

  5.   

    1).function 只能返回一个值,如果需要返回多个值,就需要用out型参数
    另:有OUT参数的,不能通过select的形式调用
    给你个例子吧
    创建:
    CREATE or replace FUNCTION fun_test (st_name IN out VARCHAR2)   
    RETURN VARCHAR2
    IS
    BEGIN   st_name := st_name || st_name;   
    RETURN st_name || '123';
    END fun_test;
    调用:
    DECLARE   
    temp_name   VARCHAR2 (20) := '111';   
    tmp         VARCHAR2 (20);
    BEGIN  
    tmp := fun_test (temp_name); 
    DBMS_OUTPUT.put_line (temp_name);   
    DBMS_OUTPUT.put_line (tmp);
    END;
    结果:temp_name=111111
    tmp=111111123
    如果使用select形式的话,会报错:
    2)参照4楼,statementType="CALLABLE",然后{call 存储过程名(参数)}
      

  6.   

    1) function 
    可以在以面的场合使用;
    select fn(p1,p2..) 
     var := fn(p1,2) 
    update t set c = fn(111) where ...2) procedure 
    不能和别的语句掺在一起,但是 proc 有自己的特点,比如 proc 内部可以使用 DML 语句等等。
      

  7.   

    在mybatis里面的调用的话
    调用Function的话,直接在查询语句中当其时“一个字段一样”运行就可以了。
    调用Procedure的话:<parameterMap id="budgetMonitorUsedParam" class="map">
        <parameter property="p_autoprocessseq" jdbcType="VARCHAR" javaType="java.lang.String" mode="IN"></parameter>
        <parameter property="p_business_book" jdbcType="VARCHAR" javaType="java.lang.String" mode="IN"></parameter>
        <parameter property="p_msg" jdbcType="VARCHAR"  javaType="java.lang.String" mode="OUT"></parameter>
        <parameter property="p_flag" jdbcType="VARCHAR"  javaType="java.lang.String" mode="OUT"></parameter>
      </parameterMap>
      <procedure id="budgetMonitorUsed" parameterMap="budgetMonitorUsedParam">
        <![CDATA[  
        { call 数据库属主.p_your_procedure_name(?,?,?,?)}
        ]]>
      </procedure>
      

  8.   

    1).function中参数里out型有什么用?调用函数不是得到的是return的值吗?应该怎么得到out的值? ---函数一般不用OUT返回值的,如果用也可以,就是在函数本来会return ,另外还有一个OUT的参数返回值(一个用于过程)
    2).在程序开发中,比如用Mybatis与数据库交互,在哪里调用function与存储过程?怎么调用?---就是你Mybatis触发的时候调用
      

  9.   

    有关存储过程,看我写的博客,5分钟就能在项目上用了,包含里面各种知识点,你看看Oracle技术_5分钟会用存储过程_存储过程简单实例(包含循环、条件、增改查、参数传入、变量赋值、java调用等)