Después de PostgreSQL 11, el equipo de controladores JDBC de PostgreSQL introdujo un nombre ENUM EscapeSyntaxCallMode en el controlador PostgreSQL versión 42.2.16. Podemos usar esta enumeración al crear una conexión de base de datos o un DataSource
objeto. Esta enumeración tiene 3 tipos de valores:
- "
func
" - configure esto cuando siempre queramos llamar funciones. - "
call
":establezca esto cuando siempre queramos llamar a Procedimientos. - "
callIfNoReturn
"- Verifica el tipo de devolución en la función/procedimiento de llamada, si existe el tipo de devolución, PostgreSQL lo considera como una función y lo llama como una forma de función. De lo contrario, lo llama como una forma de procedimiento. Así que en mi proyecto usé este "callIfNoReturn
", ya que quería que PostgreSQL detectara automáticamente si estoy llamando a una función o a un procedimiento.
Entonces, para solucionar este problema, solo necesita seguir estos pasos a continuación:
-
Actualice su versión del controlador JDBC de PostgreSQL desde cualquier versión anterior a 42.2.16 o superior en
pom.xml
o gradle.<dependency> <groupId>org.postgresql</groupId> <artifactId>postgresql</artifactId> <version>42.2.16</version> </dependency>
-
Y, por supuesto, debe tener la versión del servidor PostgreSQL>=11 instalada en su máquina para crear un procedimiento.
-
Si está utilizando Spring, al crear el objeto Fuente de datos, debe agregar
escapeSyntaxCallMode
como cadena de consulta en"jdbcUrl"
así:<bean id="dataSource" parent="com.zaxxer.hikari.HikariDataSource"> <property name="jdbcUrl" value="jdbc:postgresql://localhost:5432/dev_db?escapeSyntaxCallMode=${cibase.db.app.procedureCallPolicy}"/> <property name="username" value="${cibase.db.app.user}"/> <property name="password" value="${cibase.db.app.password}"/> </bean>
?escapeSyntaxCallMode=${cibase.db.app.procedureCallPolicy}
:aquí elegí el valor de enumeración del archivo de propiedades, pero puede escribir directamente cualquier valor de enumeración entre"func"/"call"/"callIfNoReturn"
de acuerdo a su requerimiento.
Ahora ejecute su código y funcionará correctamente.
para obtener más detalles, siga este enlace https://github.com/pgjdbc/pgjdbc