This requires dynamic SQL and a REF CURSOR:
Code:
CREATE OR REPLACE Function Get_Change_date ( tablename_in VARCHAR2,
columnname_in VARCHAR2 )Return DATE As
v_username VARCHAR2(30);
v_runtime DATE;
TYPE rc_type IS REF CURSOR;
rc rc_type;
BEGIN
OPEN rc FOR 'SELECT ' || columnname_in || ', RUN_TIME FROM ' || tablename_in || ' ORDER BY RUN_TIME DESC';
FETCH rc INTO v_username, v_runtime;
CLOSE rc;
RETURN v_runtime;
End Get_Change_Date;
/
However, the columnname_in parameter seems to be redundant as you don't really make any use of the value in that column. An equivalent function would be:
Code:
CREATE OR REPLACE Function Get_Change_date ( tablename_in VARCHAR2 )
Return DATE As
v_runtime DATE;
BEGIN
EXECUTE IMMEDIATE 'SELECT MAX(RUN_TIME) FROM ' || tablename_in
INTO v_runtime;
RETURN v_runtime;
End Get_Change_Date;
/