sql >> Databáze >  >> RDS >> PostgreSQL

Postgresql 11:Chyba volání uložené procedury – Pro volání procedury použijte CALL, Java

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:

  1. "func." " - toto nastavte, když chceme vždy volat funkce.
  2. "call." " - toto nastavte, když chceme vždy volat procedury.
  3. "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:

  1. Upgradujte verzi ovladače PostgreSQL JDBC z jakékoli starší verze na 42.2.16 nebo vyšší v pom.xml nebo gradle.

    <dependency>
        <groupId>org.postgresql</groupId>
        <artifactId>postgresql</artifactId>
        <version>42.2.16</version>
    </dependency>
    
  2. A samozřejmě musíte mít na svém počítači nainstalovaný PostgreSQL Server verze>=11, abyste mohli vytvořit proceduru.

  3. Pokud používáte Spring, musíte při vytváření objektu zdroje dat připojit escapeSyntaxCallMode jako ř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




  1. Změňte formát data v tabulce databáze mySql

  2. php výstup z mysql do html tabulky

  3. MySQL - Jak hledat přesnou shodu slov pomocí LIKE?

  4. Skript pro vytvoření uživatele mysql