OpenEdge Progress 12.7 - 添加 SQL 触发器后无法将数据插入表中

问题描述 投票:0回答:0

我在通过 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.2SQLEXP(包含在 OE Progress 中)和 OE Studio 中尝试了相同的步骤。结果相同。

我也无法通过从 Java 等导入来处理更复杂的触发逻辑。但说实话,现在我对此感到很高兴。

有人可以帮助我吗?

谢谢!

P.S.:不幸的是,使用其他数据库系统不是一个选择。

sql jdbc openedge progress-db
© www.soinside.com 2019 - 2024. All rights reserved.