Calling a function which uses dynamic SQL from within an SQL statement.
SQL>
SQL> CREATE OR REPLACE FUNCTION DynamicSysdate
2 RETURN DATE AS
3
4 v_SQLStatement VARCHAR2(100) := 'SELECT SYSDATE FROM dual';
5 v_CursorID INTEGER;
6 v_ReturnVal DATE;
7 v_Dummy INTEGER;
8 BEGIN
9 v_CursorID := DBMS_SQL.OPEN_CURSOR;
10 DBMS_SQL.PARSE(v_CursorID, v_SQLStatement, DBMS_SQL.NATIVE);
11 DBMS_SQL.DEFINE_COLUMN(v_CursorID, 1, v_ReturnVal);
12 v_Dummy := DBMS_SQL.EXECUTE_AND_FETCH(v_CursorID);
13 DBMS_SQL.COLUMN_VALUE(v_CursorID, 1, v_ReturnVal);
14 DBMS_SQL.CLOSE_CURSOR(v_CursorID);
15 RETURN v_ReturnVal;
16 EXCEPTION
17 WHEN OTHERS THEN
18 DBMS_SQL.CLOSE_CURSOR(v_CursorID);
19 RAISE;
20 END DynamicSysdate;
21 /
Function created.
SQL> show errors
No errors.
SQL>
SQL> SELECT DynamicSysdate FROM dual;
DYNAMICSYSDATE
---------------------
Jun 19, 2008 20:39:02
1 row selected.
SQL>
SQL>
Related examples in the same category