Postgres does not directly seem to support stored procedures. However, it supports it through functions and cursors. Here is an example how to write a stored procedures in PostgreSQL:
1. Create a function that returns a cursor.
CREATE OR REPLACE FUNCTION
get_employees(emp_cursor refcursor, dept_id int)
RETURNS refcursor AS
$BODY$
DECLARE
sql_statement character varying;
BEGIN
sql_statement = 'SELECT id, name FROM emp WHERE dept_id = ' || CAST(dept_id AS character varying);
OPEN emp_cursor FOR EXECUTE sql_statement;
RETURN emp_cursor;
END
$BODY$
LANGUAGE 'plpgsql' ;
That's all. Your stored procedure is ready to be accessed from your application code.
2. To call the sp from your code, you need to run two sql statements consecutively within a single transaction. Given below is sample JAVA code (A similar approach/workaround should be available in other languages too):
/*
Create your connection object here.
*/
connection.setAutoCommit(false);
/*
The above is required since every statement will be committed automatically by default. If your language does not support the above methodology, try database level transaction with BEGIN END statements.
*/
Statement statement = connection.createStatement();
ResultSet resultSet = statement.executeQuery("SELECT get_employees('emp_cursor', 1);");
resultSet = statement.executeQuery("FETCH ALL IN emp_cursor;");
/*
Do whatever stuff you want to do with the result set.
*/
connection.commit(); //Commit the transaction
connection.close();
No comments:
Post a Comment