-- Basic configuration for a PROCEDURE PROCEDURE procedure_name ( param1 IN datatype, param2 IN OUT datatype DEFAULT default_value) IS -- Enter the procedure variables here. As shown below -- variable_name datatype NOT NULL DEFAULT default_value ; BEGIN statements ; EXCEPTION WHEN exception_name THEN statements ; END; -- You'd like to pass the TABLENAME, so I've included some DBMS_SQL code that -- you can modify, it allows for dynamic SQL statments. -- This can be a Procedure it doesn't have to be a Function. FUNCTION CHECK_VALID (CKColumn IN VARCHAR2, CKTable IN VARCHAR2, CKValue IN VARCHAR2) RETURN BOOLEAN IS l_theCursor integer default 0; l_status integer default 0; p_query varchar2(200); begin l_theCursor := dbms_sql.open_cursor; p_query := 'Select '|| CKColumn ||' From '|| CKTable ||' Where '|| CKColumn ||' = '|| CKValue ; dbms_output.put_line( p_query ); dbms_sql.parse( l_theCursor, p_query, dbms_sql.native ); l_status := dbms_sql.execute(l_theCursor); l_status := dbms_sql.fetch_rows(l_theCursor); dbms_sql.close_cursor(l_theCursor); -- dbms_output.put_line( 'Last Row Count: ' || TO_CHAR( dbms_sql.last_row_count ) ); -- dbms_output.put_line( 'l_status: ' || TO_CHAR( l_status ) ); IF l_status > 0 THEN Return True; ELSE Return False; END IF; /* Process any Exceptions */ EXCEPTION WHEN NO_DATA_FOUND THEN Return False; WHEN TOO_MANY_ROWS THEN -- dbms_output.put_line( 'TOO_MANY_ROWS l_status: ' || TO_CHAR( l_status ) ); Return True; WHEN PROGRAM_ERROR THEN -- Internal error ! Return False; WHEN OTHERS THEN IF l_status = 0 THEN Return False; ELSE Return True; END IF; end CHECK_VALID;