Skip to main content

Stored Functions

DB2Rest makes it very easy to invoke stored functions for different databases as REST API.

Stored Function Endpoint

The API endpoint for calling stored function is /{dbId}/function/{funcName}, where dbId is the configured database identifier and funcName is the name of the stored function.

PostgreSQL

Consider the stored function below:


CREATE OR REPLACE FUNCTION GetMovieRentalRateFunc(movieTitle varchar)
RETURNS numeric
LANGUAGE plpgsql
AS $$
DECLARE
rentalRate numeric;
BEGIN
SELECT rental_rate INTO rentalRate FROM film WHERE title = movieTitle;
return rentalRate;
END;
$$;


The GetMovieRentalRateFunc stored function accepts a varchar datatype and returns the numeric rental value. This stored function can be invoked using the following endpoint as shown below.


curl 'http://localhost:8080/v1/rdbms/pgsqldb/function/GetMovieRentalRateFunc' -i -X POST \
-H 'Content-Type: application/json;charset=UTF-8' \
-H 'Accept: application/json' \
-d ' {
"movieTitle": "ACADEMY DINOSAUR"
}
'

The response is shown below:

HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 20

{"returnvalue":0.99}

MySQL

Consider the MySQL stored function below:


CREATE FUNCTION GetMovieRentalRateFunc(movieTitle varchar(100))
RETURNS DECIMAL(4, 2)
DETERMINISTIC
BEGIN
DECLARE rentalRate DECIMAL(4, 2);
SET rentalRate = 0.00;
SELECT rental_rate INTO rentalRate FROM film WHERE title = movieTitle;
RETURN (rentalRate);
END;


curl 'http://localhost:8080/v1/rdbms/pgsqldb/function/GetMovieRentalRateFunc' -i -X POST \
-H 'Content-Type: application/json;charset=UTF-8' \
-H 'Accept: application/json' \
-d ' {
"movieTitle": "ACADEMY DINOSAUR"
}
'

The response is shown below:

HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 20

{"returnvalue":0.99}
info

The example above shows how DB2Rest provides a unified interface to call stored procedure for any database. The API calls remain same irrespective of the database system.

Other Supported Databases

  • MariaDB
  • Microsoft SQLServer
danger

Oracle Stored Function is not supported as of current version.

PostgreSQL Issues

In case of PostgreSQL Server version >= 11, ensure that the DB_URL has the escapeSyntaxCallMode parameter set to callIfNoReturn.

DB_URL=jdbc:postgresql://localhost:5432/sakila?escapeSyntaxCallMode=callIfNoReturn

In the absence of this parameter the following error may be shown:

Hint: To call a procedure, use CALL.