我已经在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中。不只是这样的文件。