Procedimiento en Postgre
Código:
en JavaCREATE OR REPLACE FUNCTION x.x(IN p_codigo_depto integer, IN p_codigo_linea integer, IN p_codigo_familia integer, IN p_codigo_sub_familia integer, IN p_nombre_producto character varying, IN p_descripcion_corta_producto character varying, IN p_descripcion_extendida_producto character varying, IN p_stock_minimo_producto numeric, IN p_stock_maximo_producto numeric, IN p_stock_critico_producto numeric, IN p_precio_venta_unitario numeric, IN p_pto_reorden numeric, IN p_activo character varying, IN p_unidad_por_embalaje numeric, IN p_publicar_web character varying, IN p_estado_producto character varying, OUT mensaje character varying) AS $BODY$ BEGIN INSERT INTO x.p ( codigo_producto, codigo_depto, codigo_linea, codigo_familia, codigo_sub_familia, nombre_producto, descripcion_corta_producto, descripcion_extendida_producto, stock_minimo_producto, stock_maximo_producto, stock_critico_producto, precio_venta_unitario, pto_reorden, activo, unidad_por_embalaje, publicar_web, estado_producto, fecha_creacion ) VALUES ( (select * from p.getcodigoproducto()), p_codigo_depto, p_codigo_linea, p_codigo_familia, p_codigo_sub_familia, p_nombre_producto, p_descripcion_corta_producto, p_descripcion_extendida_producto, p_stock_minimo_producto, p_stock_maximo_producto, p_stock_critico_producto, p_precio_venta_unitario, p_pto_reorden, p_activo, p_unidad_por_embalaje, p_publicar_web, p_estado_producto, date(now()) ); EXCEPTION WHEN OTHERS THEN mensaje := SQLERRM; RETURN; END;$BODY$ LANGUAGE 'plpgsql' VOLATILE;
Código:
al momento de ejecutare esta linea databaseManager.executePreparedCall();public boolean addProducto(DataProducto dtProducto) { boolean okAdd = false; DatabaseManager databaseManager = new DatabaseManager(); try { databaseManager.getPooledConnection(); String transaccion = "{call x.x(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)}"; databaseManager.getPreparedCall(transaccion); databaseManager.setParamCall(1,Integer.parseInt(dtProducto.getCodigoDepto())); databaseManager.setParamCall(2,Integer.parseInt(dtProducto.getCodigoLinea())); databaseManager.setParamCall(3,Integer.parseInt(dtProducto.getCodigoFamilia())); databaseManager.setParamCall(4,Integer.parseInt(dtProducto.getCodigoSubFamilia())); databaseManager.setParamCall(5,dtProducto.getNombreProducto()); databaseManager.setParamCall(6,dtProducto.getDescripcionCortaProducto()); databaseManager.setParamCall(7,dtProducto.getDescripcionExtensaProducto()); databaseManager.setParamCall(8,dtProducto.getStockMinimoProducto()); databaseManager.setParamCall(9,dtProducto.getStockMaximoProducto()); databaseManager.setParamCall(10,dtProducto.getStockCriticoProducto()); databaseManager.setParamCall(11,dtProducto.getPrecioVentaUnitario()); databaseManager.setParamCall(12,dtProducto.getPuntoReorden()); databaseManager.setParamCall(13,dtProducto.getActivo()); databaseManager.setParamCall(14,dtProducto.getUnidadEmbalaje()); databaseManager.setParamCall(15,dtProducto.getPublicarWeb()); databaseManager.setParamCall(16,dtProducto.getEstado()); databaseManager.registerOutParameter(17,Types.VARCHAR); databaseManager.executePreparedCall(); if(databaseManager.getCstmt().getString(17) != null) { String mensajeError = databaseManager.getCstmt().getString(17); System.out.println("MENSAJE DE ERROR DE SP addProducto = " + mensajeError); return false; } else { okAdd = true; } } catch(Exception e) { System.out.println("Error ServicioProductoBean.addProducto()= " + e.getMessage()); } finally { databaseManager.dropPooledConnection(); } return okAdd; }
se cae diciendo que la funcion no existe, al parecer es un problema de compatibilidad de tipos de datos pero no estoy seguro.
Ojala me puedan ayudar porfa