我在通过 OE Progress 12.7 数据库添加和使用 SQL 触发器时遇到大量问题。
我正在使用 sports2020 数据库,具有 DBA+Resources 访问权限的用户。
我可以将新行添加到(例如)表PUB.BillTo中,没有任何问题,一切都按预期进行。
INSERT INTO PUB.BillTo (CustNum) VALUES (<number>)
但是在我向表中添加“插入之前”触发器之后(第 2 列是整数),如下所示:
CREATE TRIGGER trg1406 BEFORE INSERT ON PUB.BillTo
REFERENCING NEWROW
FOR EACH ROW
BEGIN
NEWROW.setValue(2, 1990);
END
插入更多行将停止工作,并且 JDBC 驱动程序仅返回错误:
org.jkiss.dbeaver.model.sql.DBSQLException: SQL Error [HY000]: [DataDirect][OpenEdge JDBC Driver]Transliteration failed, reason: invalid UTF8 data at org.jkiss.dbeaver.model.impl.jdbc.exec.JDBCStatementImpl.executeStatement(JDBCStatementImpl.java:133) at org.jkiss.dbeaver.ui.editors.sql.execute.SQLQueryJob.executeStatement(SQLQueryJob.java:582) at org.jkiss.dbeaver.ui.editors.sql.execute.SQLQueryJob.lambda$1(SQLQueryJob.java:491) at org.jkiss.dbeaver.ui.editors.sql.execute.SQLQueryJob.executeSingleQuery(SQLQueryJob.java:501) at org.jkiss.dbeaver.ui.editors.sql.execute.SQLQueryJob.extractData(SQLQueryJob.java:934) at org.jkiss.dbeaver.ui.editors.sql.SQLEditor$QueryResultsContainer.readData(SQLEditor.java:3921) at org.jkiss.dbeaver.ui.controls.resultset.ResultSetJobDataRead.lambda$0(ResultSetJobDataRead.java:123) at org.jkiss.dbeaver.model.exec.DBExecUtils.tryExecuteRecover(DBExecUtils.java:189) at org.jkiss.dbeaver.ui.controls.resultset.ResultSetJobDataRead.run(ResultSetJobDataRead.java:121) at org.jkiss.dbeaver.ui.controls.resultset.ResultSetViewer$ResultSetDataPumpJob.run(ResultSetViewer.java:5101) at org.jkiss.dbeaver.model.runtime.AbstractJob.run(AbstractJob.java:105) at org.eclipse.core.internal.jobs.Worker.run(Worker.java:63) Caused by: java.sql.SQLException: [DataDirect][OpenEdge JDBC Driver]Transliteration failed, reason: invalid UTF8 data at com.ddtek.jdbc.openedgebase.ddb9.b(Unknown Source) at com.ddtek.jdbc.openedgebase.ddb9.a(Unknown Source) at com.ddtek.jdbc.openedgebase.ddb8.b(Unknown Source) at com.ddtek.jdbc.openedgebase.ddb8.a(Unknown Source) at com.ddtek.jdbc.openedge.client.dde.a(Unknown Source) at com.ddtek.jdbc.openedge.client.dde.af(Unknown Source) at com.ddtek.jdbc.openedge.client.dde.aa(Unknown Source) at com.ddtek.jdbc.openedge.client.dde.c(Unknown Source) at com.ddtek.jdbc.openedge.client.dde._(Unknown Source) at com.ddtek.jdbc.openedge.ddf.b(Unknown Source) at com.ddtek.jdbc.openedgebase.ddek.w(Unknown Source) at com.ddtek.jdbc.openedgebase.ddek.s(Unknown Source) at com.ddtek.jdbc.openedgebase.ddek.execute(Unknown Source) at org.jkiss.dbeaver.model.impl.jdbc.exec.JDBCStatementImpl.execute(JDBCStatementImpl.java:330) at org.jkiss.dbeaver.model.impl.jdbc.exec.JDBCStatementImpl.executeStatement(JDBCStatementImpl.java:131) ... 11 more
谷歌搜索根本没有帮助,因为每个页面都希望我读取数据,但实际上我正在添加它们。另外,我没有添加文本,只是添加数字。
我在 DBeaver 23.1.2、SQLEXP(包含在 OE Progress 中)和 OE Studio 中尝试了相同的步骤。结果相同。
我也无法通过从 Java 等导入来处理更复杂的触发逻辑。但说实话,现在我对此感到很高兴。
有人可以帮助我吗?
谢谢!
P.S.:不幸的是,使用其他数据库系统不是一个选择。