PROCEDURE tr_executesql (sqlstring IN VARCHAR2) AS
cid NUMBER;
numrows integer;
BEGIN
/* Open new cursor and return cursor ID. */
cid := DBMS_SQL.OPEN_CURSOR;
/* Parse and immediately execute dynamic SQL statement. */
DBMS_SQL.PARSE(cid, sqlstring, DBMS_SQL.V7);
numrows := DBMS_SQL.EXECUTE(cid);
/* Close cursor. */
DBMS_SQL.CLOSE_CURSOR(cid);
EXCEPTION
/* If an exception is raised, close cursor before exiting. */
WHEN OTHERS THEN
DBMS_SQL.CLOSE_CURSOR(cid);
RAISE; -- reraise the exception
END tr_executesql;