如何在程序内部调用函数?

时间:2018-10-30 22:45:58

标签: oracle plsql

如何在过程中调用函数。 我在互联网上找了很多东西,但找不到。

我在程序包主体中的功能如下:

CREATE OR REPLACE PACKAGE BODY account_api AS
    PROCEDURE add_new_account
        ( p_acc_id     accounts.acc_id%type
        , p_acc_name   accounts.acc_name%type
         , p_acc_amount accounts.acc_amount%type
         , p_acc_date   accounts.acc_date%type)
      IS
      BEGIN
         INSERT INTO accounts(acc_id, acc_name, acc_amount, acc_date)
        VALUES (p_acc_id, p_acc_name, p_acc_amount, p_acc_date);     
    COMMIT;
     EXCEPTION
            WHEN OTHERS THEN
            ROLLBACK;
           RAISE;
   END;
  FUNCTION get_date
      (p_acc_id    accounts.acc_id%type)
   RETURN date IS res1 date;
  BEGIN
      SELECT acc_date INTO res1
      FROM accounts WHERE acc_id = p_acc_id;
      RETURN res1;
  end;
  end account_api;
  /

2 个答案:

答案 0 :(得分:0)

您有很多方法来做到这一点。

  1. 交换方法在程序包中的位置(“子功能”然后是过程)。

  2. 将函数添加到程序包规范中,并使用点符号进行调用

  3. 使用前向声明

我认为前向声明在您的情况下是最好的。

https://docs.oracle.com/cd/B28359_01/appdev.111/b28370/subprograms.htm#i4096

答案 1 :(得分:0)

如果只想在过程中调用函数,则可以像下面所示的平均值函数一样调用它,并将其值存储在过程的变量中。

SELECT AVG(SALARY) INTO V_AVG_SAL FROM EMPLOYEES;