sql >> Database teknologi >  >> RDS >> Oracle

Spring Data JPA kalder Oracle Function

Du kan kalde din funktion via native forespørgsel og få resultater fra 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);

}

Bemærk, at det ikke virker, hvis din funktion bruger DML-sætninger. I dette tilfælde skal du bruge @Modyfing annotation over forespørgsel, men så skal funktionen selv returnere nummer på grund af @Modyfing returtypebegrænsninger.

Du kan også implementere dit CustomRepository og brug 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. Mulig måde at indsætte lastInsertId fra en tabel til en anden på samme tid eller samtidigt

  2. Hvordan forbinder man en C# Windows mobile 6.5-app til en Postgres-database?

  3. MySQL - Bedste metode til at gemme og indlæse varer

  4. Pivottabel og sammenkædning af kolonner