从Oracle数据库执行外部方法

时间:2018-06-21 08:41:50

标签: java oracle spring-boot methods execute

我已经在Oracle 12c上创建了这个

CREATE OR REPLACE PACKAGE LOG_SAL_TEST IS
  PROCEDURE log_sal(
    emp_id          IN  NUMBER,
    old_sal         IN  NUMBER,
    new_sal         IN NUMBER
  );
END LOG_SAL_TEST;
/

CREATE OR REPLACE PACKAGE BODY LOG_SAL_TEST AS
  PROCEDURE log_sal(
    emp_id          IN  NUMBER,
    old_sal         IN  NUMBER,
    new_sal         IN NUMBER
  ) AS LANGUAGE JAVA
    NAME 'com.sth.ctt.business.cases.control.CaseWatch.logSal(int, float, float)';
END LOG_SAL_TEST;
/

CREATE OR REPLACE TRIGGER sal_trig
  AFTER UPDATE OF shi_status ON TAB1
  FOR EACH ROW
  WHEN (new.status = 'ZAK')
CALL idk.log_sal_test.log_sal(1, 5, 8);

然后我进行此更新,以便触发输入:

UPDATE TAB1
SET status = 'ZAK'
where id = '99999999';

触发器启动,但出现错误:

[2018-06-21 10:24:58] [99999][29540] ORA-29540: class com.sth.ctt.business.cases.control.CaseWatch does not exist
[2018-06-21 10:24:58] ORA-04088: error during execution of trigger 'IDK.SAL_TRIG'

在从数据库中进行读写操作的spring-boot应用程序中:

package com.sth.ctt.business.cases.control;

public class CaseWatch {

    public static void logSal (int empID, float oldSal, float newSal)
    {
        System.out.println("jestem"); // does not trigger
        System.out.println("jestem2");
    }
}

我不想将此类加载到数据库中。 我希望Oracle从spring-boot应用程序中调用我的外部方法。我该如何运作? 我的应用程序在localhost上运行,但是数据库本身在remote server上(对于数据库,我需要输入localhost以外的IP)。 我希望它从spring-boot应用程序上下文中执行方法-因此在正在运行的jar / war中。不只是这样的文件。

0 个答案:

没有答案