oracle - Oracle OCI jdbc 驱动程序陷阱 ORA-01403: 未找到数据
问题描述
我遇到了 Oracle OCI jdbc 驱动程序没有抛出 ORA-01403 No data found 异常的问题。与 Oracle 11 和 12 相关。也许我需要在 Connection 对象上设置一个属性或一些东西。瘦驱动程序正确地引发异常,但 OCI 驱动程序只是继续没有错误并更新 0 行,即使表中有数据。
以下程序的输出是:
THIN 驱动程序抛出异常:ORA-01403:未找到数据 ORA-06512:在“EE.TABLEX_UPSERT_PRE”,第 4 行 ORA-04088:执行触发器“EE.TABLEX_UPSERT_PRE”期间出错
从 OCI 驱动程序更新的行 =0
public static void main(String[] args) {
try {
Driver d = (Driver) Class.forName("oracle.jdbc.OracleDriver").newInstance();
Properties info = new Properties();
info.put("user", "me");
info.put("password", "mypwd");
Connection thinConnection = d.connect("jdbc:oracle:thin:@host:1521:DEV",info);
Connection ociConnection = d.connect("jdbc:oracle:oci:@DEV",info);
try {
Statement s = thinConnection.createStatement();
s.execute("UPDATE tablex SET name='newname'");
System.out.println("rows updated in THIN Driver =" + s.getUpdateCount());
}
catch (SQLException e) {
System.out.println("Exception thrown from THIN Driver: " + e.getMessage());
}
try {
Statement s = ociConnection.createStatement();
s.execute("UPDATE tablex SET name='newname'");
System.out.println("rows updated from OCI Driver =" + s.getUpdateCount());
}
catch (SQLException e) {
System.out.println("Exception thrown from OCI Driver: " + e.getMessage());
}
}
catch (Exception e) {
e.printStackTrace();
}
System.exit(0);
}
{////// SQL
CREATE TABLE TABLEX
(
NAME VARCHAR2(20)
);
INSERT INTO TABLEX(name) values('data1');
CREATE TABLE TABLEy
(
ID NUMBER
);
create or replace
TRIGGER TABLEX_UPSERT_PRE
BEFORE INSERT OR UPDATE ON TABLEX FOR EACH ROW
DECLARE
cid number;
BEGIN
select id into cid from tabley where id=0; -- INTENTIONAL No Data Found error
end;
}
解决方案
推荐阅读
- spring-boot - Liquibase - Spring Boot - DATABASECHANGELOG 创建失败
- javascript - 初学者总问题:执行两个函数
- google-apps-script - 为什么这两个脚本不能共存?
- scala - Spark - 将行附加到现有数据框
- node.js - 当我将应用程序 nodejs 部署到 heroku 时,我遇到了问题
- python - 从 python 中的开放硬件监视器/WMI 获取电源/电压信息?
- heroku - heroku 应用程序没有出现在谷歌搜索中
- apache-spark - 使用结构化流处理每个批次的记录
- r - 基于变量的色点(基础 R)
- spring-security - 这个例子中的原则和认证有什么区别?