sql >> データベース >  >> RDS >> Oracle

Oracle関数を呼び出すSpringDataJPA

    ネイティブクエリを介して関数を呼び出し、デュアルから結果を取得できます。

    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);
    
    }
    

    関数がDMLステートメントを使用している場合は機能しないことに注意してください。この場合、@Modyfingを使用する必要があります クエリに対するアノテーションですが、@Modyfingのため、関数自体が数値を返す必要があります タイプの制限を返します。

    CustomRepositoryを実装することもできます 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. SQL SELECT LIKE(インセンシティブケーシング)

    2. Oracleのストアドプロシージャに一重引用符で囲まれたvarcharを渡す方法

    3. varchar(max) どこでも?

    4. 即時変更ユーザーバインド変数を実行します