Stored Procedure Component
Using the Stored Procedure Component
The Stored Procedure component (SP component) allows executing Stored Procedure for your database application.
Connection
In the Connection section, select a database connection. If you don't have a connection, then you need to create a Database Connection.
Stored Procedure Settings
In the Stored Procedure Settings section, select the needed Stored Procedure and provide mapping for Stored Procedure parameters. (If you don't have a ready to use Stored Procedure yet, then you can pick one from our Examples section below.)
Each parameter has a name and type, which you can also map into a variable from the service flow. This means when the service flow is executed, the variables you map will be automatically passed into this component.
Response Body
The last section of the SP component is the Response body section. This is where you define the output of this component. You can manually enter the response but we recommend to click the Generate button to test the component and set its response this way.
When you click the Generate button, a popup will open and there you can test the Stored Procedure. You will need to enter any parameter values (if any). Once you have tested the Stored Procedure, click Import response button to set the response (template) for this component.
Parameter Types Mapping
API Express works with Relation Database via JDBC driver version 4.0.
Every database has its own set of data types and all of them have to be mapped into limited set of types:
NUMBER
STRING
DATE
TIME
TIMESTAMP
BOOLEAN
CLOB
BLOB
BINARY
BYTE
SHORT
INTEGER
LONG
FLOAT
DOUBLE
In majority cases, API Express defines types of parameters of Stored Procedure automatically but in some cases it is impossible and in this case type of parameter is set as OTHER and it is user's responsibility to manually provide a correct type.
Even in the case of automatic type detection, it is highly recommended to double check parameter types and change them to correct ones if the detection was wrong.
Pay attention that the DATE type contains information only about the year, month and date only. If it's needed to get/pass information about hours, minutes, seconds then the TIMESTAMP type should be used.
Some databases provide the ability to create an alias for a data types (for example Boolean type can be an alias on number type) in this case the original type should be specified.
Examples section
MySQL Examples
MySQL the example of Stored Procedure which returns passed value
create procedure echo(IN message varchar(255))
BEGIN
SELECT message;
END;
MySQL example of Stored Procedure which calculates sqrt of passed parameter
DELIMITER $$
DROP PROCEDURE IF EXISTS my_sqrt$$
CREATE PROCEDURE my_sqrt(input_number INT, OUT out_number FLOAT)
BEGIN
SET out_number=SQRT(input_number);
END$$
DELIMITER ;
Example of working with tables in Stored Procedure
create table books
(
id int auto_increment primary key,
name char(255) not null
)
engine=InnoDB
;
Insert initial data into books table
insert into books (name) values ('In Search of Lost Time') ;
insert into books (name) values ('Don Quixote') ;
insert into books (name) values ('Ulysses') ;
DELIMITER //
CREATE PROCEDURE GetBooksByName(IN pname VARCHAR(255))
BEGIN
SELECT *
FROM books
WHERE name = pname;
END //
DELIMITER ;
Procedure INSERT
DELIMITER //
CREATE PROCEDURE insertBook(IN name VARCHAR(255))
BEGIN
insert into books (name) values (name);
END //
DELIMITER ;
API Express response
{
"data": {
"updateCount1": 1
},
"status": "success"
}
Procedure UPDATE
CREATE PROCEDURE updateBookByName(IN pname VARCHAR(255), IN newName VARCHAR(255))
BEGIN
UPDATE books SET name = newName WHERE name = pname;
END
API Express response
{
"data": {
"updateCount1": 1
},
"status": "success"
}
Procedure DELETE
CREATE PROCEDURE deleteBookByName(IN pname VARCHAR(255))
BEGIN
DELETE from books WHERE name = pname;
END
API Express response
{
"data": {
"updateCount1": 1
},
"status": "success"
}
MSSQL Examples
MSSQL example of Stored Procedure which returns passed value
CREATE PROCEDURE echo(
@message VARCHAR(255)
)
AS
BEGIN
SELECT @message as message
END
Invoked Stored Procedure with a value of parameter equal hello the response will be:
{
"data": {
"#result-set-1": [
{
"message": "hello"
}
]
},
"status": "success"
}
Create books table
create table books
(
id int identity primary key,
name varchar(255)
)
Insert initial data
insert into books (name) values ('In Search of Lost Time') ;
insert into books (name) values ('Don Quixote') ;
insert into books (name) values ('Ulysses') ;
Stored Procedure which returns book info by id
CREATE PROCEDURE GetBookById(
@id INT
)
AS
BEGIN
SELECT * FROM books WHERE id=@id
END
For parameter 1 Stored Procedure component returns
{
"data": {
"#result-set-1": [{
"id": 1,
"name": "In Search of Lost Time"
}]
},
"status": "success"
}
Create Procedure getBookNameById
(
@id as int,
@name as nvarchar(20) out
)
as
begin
select @name=name from books where id=@id
end
{
"data": {
"@name": "In Search of Lost Ti"
},
"status": "success"
}
Procedure INSERT
CREATE PROCEDURE insertBook(
@name as nvarchar(20)
)
AS
BEGIN
insert into books (name) values (@name);
END
API Express response
{
"data": {
"updateCount1": 1
},
"status": "success"
}
Procedure UPDATE
CREATE PROCEDURE updateBookByName(
@pname as nvarchar(20),
@newName as nvarchar(20)
)
AS
BEGIN
UPDATE books SET name = @newName WHERE name = @pname;
END
API Express response
{
"data": {
"updateCount1": 1
},
"status": "success"
}
Procedure DELETE
CREATE PROCEDURE deleteBookByName(@pname as nvarchar(20))
AS
BEGIN
DELETE from books WHERE name = @pname;
END
API Express response
{
"data": {
"updateCount1": 1
},
"status": "success"
}
PostgreSQL Examples
CREATE OR REPLACE FUNCTION echo(message varchar(255)) RETURNS varchar(255) AS $$
BEGIN
RETURN message;
END;
$$ LANGUAGE plpgsql;
{
"data": {
"#result-set-1": [{
"result": "hello"
}]
},
"status": "success"
}
create table books
(
id integer not null constraint books_pkey primary key,
name varchar(255)
)
;
insert into books (id, name) values (1, 'In Search of Lost Time') ;
insert into books (id, name) values (2, 'Don Quixote') ;
insert into books (id, name) values (3, 'Ulysses') ;
CREATE OR REPLACE FUNCTION AddBook(id INT, name varchar(255))
RETURNS void AS $$
BEGIN
INSERT INTO books VALUES (id, name);
END;
$$ LANGUAGE plpgsql;
{
"data": {
"#result-set-1": [
{
"result": {
"type": "void",
"value": ""
}
}
]
},
"status": "success"
}
Oracle Examples
create table "books"
(
"id" NUMBER not null primary key,
"name" VARCHAR2(255)
)
Procedure SELECT
CREATE OR REPLACE PROCEDURE selectBookNameById (id IN number, bookName OUT VARCHAR2)
IS
BEGIN
SELECT "name" INTO bookName from "books" WHERE "id" = id;
END selectBookNameById;
/
API Express response
{
"data": {
"BOOKNAME": "Test"
},
"status": "success"
}
Procedure INSERT
CREATE OR REPLACE PROCEDURE insertBook (id IN number, pname IN VARCHAR)
as
BEGIN
INSERT INTO "books" ("id", "name") VALUES (id, pname);
END insertBook;
/
API Express response
{
"data": {},
"status": "success"
}
Procedure UPDATE
CREATE OR REPLACE PROCEDURE updateBook (id IN number, pname IN VARCHAR)
as
BEGIN
UPDATE "books" SET "name" = pname WHERE "id" = id;
END updateBook;
/
API Express response
{
"data": {},
"status": "success"
}
Procedure DELETE
CREATE OR REPLACE PROCEDURE deleteBook (id IN number)
as
BEGIN
DELETE from "books" WHERE "id" = id;
END deleteBook;
/
API Express response
{
"data": {},
"status": "success"
}
Updated over 4 years ago