Documentation

(jvx:server:db)

Using Table Functions

This is an old revision of the document!


Table functions are a cool thing. Use it to dynamically create records directly in the database with all available database features. Not all database systems support table functions, but Oracle and PostgreSql do. Here's an example for a table function with Oracle.

First, we need the table function:

-- the type
DROP TYPE type_testtable;
DROP TYPE type_testrow;
 
CREATE TYPE type_testrow AS OBJECT (
  id          NUMBER,
  description VARCHAR2(50)
);
/
 
CREATE TYPE test_testtable IS TABLE OF type_testrow;
/
 
-- the table function
CREATE OR REPLACE FUNCTION get_tablefunction(pRowCount IN NUMBER) RETURN type_testtable AS
  result type_testtable := type_testtable();
BEGIN
  FOR i IN 1 .. pRowCount LOOP
    result.extend;
    result(result.LAST) := type_testrow(i, 'Description for record ' || i);
  END LOOP;
  RETURN result;
END;
/

To use the table function with a DBStorage, try following:

DBStorage dbs = new DBStorage();
dbs.setDBAccess(dba);
dbs.setFromClause("TABLE(get_tablefunction(:COUNT))");
dbs.open();
 
DirectObjectConnection con = new DirectObjectConnection();
con.put("dbs", dbs);
 
MasterConnection macon = new MasterConnection(con);
macon.open();
 
RemoteDataSource rds = new RemoteDataSource(macon);
rds.open();
 
RemoteDataBook rdb = new RemoteDataBook();
rdb.setDataSource(rds);
rdb.setName("dbs");
rdb.setFilter(new Equals("COUNT", BigDecimal.valueOf(20)));
rdb.open();
 
rdb.fetchAll();
This website uses cookies for visitor traffic analysis. By using the website, you agree with storing the cookies on your computer.More information