Po PostgreSQL 11 zavedl tým ovladačů PostgreSQL JDBC název ENUM EscapeSyntaxCallMode v ovladači PostgreSQL verze 42.2.16. Tento výčet můžeme použít při vytváření databázového připojení nebo DataSource objekt. Tento výčet má 3 typy hodnot:
- "
func." " - toto nastavte, když chceme vždy volat funkce. - "
call." " - toto nastavte, když chceme vždy volat procedury. - "
callIfNoReturn" - Kontroluje návratový typ při volání funkce/procedury, pokud návratový typ existuje, PostgreSQL to považuje za funkci a volá to jako způsob funkce. Jinak to volá jako způsob procedury. Takže v mém projektu jsem použil tento "callIfNoReturn“, protože jsem chtěl, aby PostgreSQL automaticky detekoval, zda volám funkci nebo proceduru.
Chcete-li tento problém vyřešit, stačí provést následující kroky:
-
Upgradujte verzi ovladače PostgreSQL JDBC z jakékoli starší verze na 42.2.16 nebo vyšší v
pom.xmlnebo gradle.<dependency> <groupId>org.postgresql</groupId> <artifactId>postgresql</artifactId> <version>42.2.16</version> </dependency> -
A samozřejmě musíte mít na svém počítači nainstalovaný PostgreSQL Server verze>=11, abyste mohli vytvořit proceduru.
-
Pokud používáte Spring, musíte při vytváření objektu zdroje dat připojit
escapeSyntaxCallModejako řetězec dotazu v"jdbcUrl"takhle:<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}:zde jsem vybral hodnotu výčtu ze souboru vlastností, ale můžete přímo zadat libovolnou hodnotu výčtu mezi"func"/"call"/"callIfNoReturn"podle vašeho požadavku.
Nyní spustíte svůj kód a bude fungovat správně.
Poznámka: Nemusíte nic měnit ve způsobu volání procedury, ať už používáte prostý kód JDBC nebo @Procedure v Spring Data Jpa.
pro více podrobností prosím klikněte na tento odkaz https://github.com/pgjdbc/pgjdbc