【问题标题】:not all variables bound when returning inserted id Oracle返回插入的 id Oracle 时并非所有变量都绑定
【发布时间】:2017-07-22 16:27:04
【问题描述】:

在数据库表中插入新数据时,我试图获取新的 id,但我得到了:

ORA-01008: not all variables bound

我是在 Java SE 项目中做的,

 public ResultSet ejecutarConsulta(String instruccionSql){
        rs = null;
        try {
                st = con.createStatement();
                rs = st.executeQuery(instruccionSql);
                System.out.println("Consulta Exitosa");
        } catch (SQLException e) {
                System.out.println("Error en la Consulta: "+e.getMessage());
        }
        return rs;
    }

我传递的字符串“instruccionSql”是

     insert  into Usuario(DOCUMENTOIDENTIDAD,NOMBRE,CARGO,CONTRASENA,PERMISO)
 values ('22323','asfa','Administrador','123456','0')
 RETURNING ID INTO :temp

我有相应的触发器和Seq来生成表自增id。

【问题讨论】:

    标签: java sql oracle auto-increment


    【解决方案1】:

    使用CallableStatement并注册OUT参数。
    这也是注册 IN 参数的绝佳机会。

    String mySql = "DECLARE x NUMBER; BEGIN "
            + "  insert  into Usuario(DOCUMENTOIDENTIDAD,NOMBRE,CARGO,CONTRASENA,PERMISO) "
            + "  values (?,?,?,?,?) "
            + "  RETURNING ID INTO x;"
            + "  ? := x;"
            + "END; ";
    CallableStatement cal = conn.prepareCall(mySql);
    
    cal.setString(1, "22323");
    cal.setString(2, "asfa");
    cal.setString(3, "Administrador");
    cal.setString(4, "123456");
    cal.setString(5, "0");
    cal.registerOutParameter(6, java.sql.Types.INTEGER);
    
    cal.executeQuery();
    
    Integer newId = cal.getInt(6);
    

    【讨论】:

    • 嗨,我正在尝试这种方式,没有 IN 参数,只有输出,所以我写了 cal.registerOutParameter(1, java.sql.Types.INTEGER);但它说索引 :: 2 中缺少 IN 或 OUT 参数,但只有“?”在, "? := x;"
    • @Jomazao 请将您的实际代码粘贴到问题中,不查看源代码很难诊断错误。
    • 我这样做并且有效,CallableStatement cal = con.prepareCall(consulta); cal.setString(2, ""); cal.registerOutParameter(1, java.sql.Types.INTEGER); cal.executeQuery();整数 cosa=cal.getInt(1);查询=DECLARE x NUMBER;开始插入 Usuario(DOCUMENTOIDENTIDAD,NOMBRE,CARGO,CONTRASENA,PERMISO) 值 ('123456','asfasf','Administrador','123456','0') RETURNING ID INTO :x; ? :=x;结束;
    【解决方案2】:

    您正在尝试使用未绑定到值的绑定变量 (:i)。

    【讨论】:

    • 你能解释一下吗,怎么做。
    • 在使用绑定变量到sql未匹配数据类型时可能会出现一些冲突
    猜你喜欢
    • 2021-01-04
    • 2022-07-08
    • 2021-12-11
    • 1970-01-01
    • 2011-01-11
    • 2012-09-05
    • 2010-11-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多