我是新手,问题都很基本,所以希望大家不要耻笑。
我想在Oracle数据库中创建一个function,有2个输入参数a1 varchar2、a2 varchar2,2个输出参数b1 number、b2 number;
实现的功能有b1=to_number(a1)+to_number(a2);b2=to_number(a1)-to_number(a2);并在一个已有的表t(b1 number, b2 number)(这里b1和b2为列名)中添加这次执行的值b1,b2很多东西我没有搞清楚,所以,具体问题如下:
1,所说功能能否实现否,比如可否返回2个值,可否加入t表(是否这种操作一定要在proceduer中进行)。
2,如何创建这个function(详细代码,如果不能实现的功能请面声明,代码中就不用加了)。
3,如何调用这个方法,我用的是PL/SQL进行简单的调试,请问在这里如何写调用的代码。
4,其他问题:function中是否不能用declare声明中间变量?如果能如何操作?如果不能请问为什么呢?如果需要转换数据,需要中间变量的时候怎么办呢?比如将a,b两个数的值互换,返回a,b。

解决方案 »

  1.   

    1.函数一般不能影响数据库的改变,不用来进行DML操作。尽管函数可以通过AUTONOMOUS_TRANSACTION pragma来实现commit,
    但是有人说这是很危险的事情。
    4。函数可以在declare声明申请本地变量。
      

  2.   


    1,功能可以实现,可以返回2个值,可以加入T表。
    2,暂时略过...
    3,plsql中 exec procname
    4,可以用declare声明变量,不过需要在存储过程头部声明。
      

  3.   

    1、函数貌似只可以返回一个值。2、function中不需要declare声明中间变量,function的格式如下:
    CREATE OR REPLACE FUNCTION F_TEST(A1 IN NUMBER,
                                      A2 IN NUMBER) RETURN NUMBER IS
      B1 NUMBER;
      --  临时变量
      V_TEMP NUMBER(6, 4) := 0;BEGIN
      B1 := A1 + A2;
      RETURN B1;
    END;
    /
    3你可以直接用存储过程做呀:
    CREATE OR REPLACE PROCEDURE P_TEST(A1 IN VARCHAR2,
                                      A2 IN VARCHAR2) 
      --  临时变量
      V_B1 NUMBER ;
      V_B2 NUMBER;
    BEGIN
      V_B1 := to_number(a1)+to_number(a2);
    V_B2 := to_number(a1)-to_number(a2); 
    INSERT INTO T VALUES (V_B1,V_B2);
    COMMIT;

    EXCEPTION
      WHEN OTHERS THEN 
          DBMS_OUTPUT.PUT_LINE(SQLERRM); 
      END;
    END;
    /