sql >> Databáze >  >> RDS >> Oracle

Spring Data JPA volající Oracle Function

Svou funkci můžete zavolat pomocí nativního dotazu a získat výsledek z dual.

public interface HelloWorldRepository extends JpaRepository<HelloWorld, Long> {

    @Query(nativeQuery = true, value = "SELECT PKG_TEST.HELLO_WORLD(:text) FROM dual")
    String callHelloWorld(@Param("text") String text);

}

Všimněte si, že to nebude fungovat, pokud vaše funkce používá příkazy DML. V tomto případě budete muset použít @Modyfing anotace přes dotaz, ale funkce sama musí vrátit číslo kvůli @Modyfing omezení typu návratu.

Můžete také implementovat svůj CustomRepository a použijte SimpleJdbcCall :

import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.namedparam.MapSqlParameterSource;
import org.springframework.jdbc.core.namedparam.SqlParameterSource;
import org.springframework.jdbc.core.simple.SimpleJdbcCall;
import org.springframework.stereotype.Repository;

@Repository
public class HelloWorldRepositoryImpl implements HelloWorldRepositoryCustom {

    @Autowired
    private JdbcTemplate jdbcTemplate;

    @Override
    public String callHelloWorld() {
        SimpleJdbcCall jdbcCall = new SimpleJdbcCall(jdbcTemplate)
                .withCatalogName("PKG_TEST") //package name
                .withFunctionName("HELLO_WORLD");
        SqlParameterSource paramMap = new MapSqlParameterSource()
                .addValue("param", "value"));
        //First parameter is function output parameter type.
        return jdbcCall.executeFunction(String.class, paramMap));
    }

}


  1. Jak načíst počet řádků pro všechny tabulky v databázi SQL SERVER

  2. Kaskádový dotaz na odstranění

  3. Proč se čas MySQL unixu zastaví pod limitem 32 bitů bez znaménka?

  4. Vyhledávání pomocí zástupných znaků v zašifrovaných datech v databázi MySQL?