In multi-form Oracle Forms applications, developers often need to manage navigation between different forms that are already open. Instead of repeatedly reopening forms, Oracle provides built-ins like FIND_FORM and GO_FORM. These built-ins allow you to check whether a form is active and switch focus to it when required.
This tutorial explains how to use FIND_FORM and GO_FORM, their syntax, examples, and best practices.
FIND_FORM in Oracle Forms
The FIND_FORM built-in is used to check whether a specific form is currently open. It returns the form ID if the form is active, otherwise it returns NULL. This is useful when you need to determine whether a form is loaded before performing an action such as navigating or closing it.
Key Points
- Returns the unique form ID of the specified form.
- Returns
NULLif the form is not open. - Useful for conditional checks before navigation.
Syntax
form_id := FIND_FORM(form_name);
Example
DECLARE
v_form_id FORM_MODULE;
BEGIN
v_form_id := FIND_FORM('EMPLOYEE_FORM');
IF v_form_id IS NOT NULL THEN
MESSAGE('Employee form is already open.');
ELSE
OPEN_FORM('EMPLOYEE_FORM');
END IF;
END;
In this example, the code checks if EMPLOYEE_FORM is already open. If not, it opens the form.
GO_FORM in Oracle Forms
The GO_FORM built-in is used to navigate to a form that is already open. It transfers control to the specified form, bringing it to the foreground for the user to work on.
Key Points
- Switches focus to an open form.
- Requires that the target form is already open.
- If the form is not open, it will raise an error.
Syntax
GO_FORM(form_name);
Example
BEGIN
GO_FORM('DEPARTMENT_FORM');
END;
This command switches focus to the DEPARTMENT_FORM if it is already open.
Using FIND_FORM and GO_FORM Together
The most common use case is to combine FIND_FORM and GO_FORM. This allows you to check whether a form is open and, if so, transfer focus to it. If it is not open, you can decide whether to open it.
Example: Safe Navigation Between Forms
DECLARE
v_form_id FORM_MODULE;
BEGIN
v_form_id := FIND_FORM('DEPARTMENT_FORM');
IF v_form_id IS NOT NULL THEN
GO_FORM('DEPARTMENT_FORM');
ELSE
OPEN_FORM('DEPARTMENT_FORM');
END IF;
END;
Here, the code first checks if DEPARTMENT_FORM is open. If it is, the user is taken directly to it using GO_FORM. If not, it is opened with OPEN_FORM.
Practical Scenarios
Scenario 1: Preventing Duplicate Form Instances
If you do not want users to open multiple instances of the same form:
IF FIND_FORM('EMPLOYEE_FORM') IS NULL THEN
OPEN_FORM('EMPLOYEE_FORM');
ELSE
GO_FORM('EMPLOYEE_FORM');
END IF;
Scenario 2: Switching Between Dashboard Forms
In a multi-form dashboard application, you might have different modules (e.g., Employees, Departments, Payroll). Using GO_FORM ensures that the user switches smoothly without reopening forms unnecessarily.
Best Practices
- Always use FIND_FORM before GO_FORM – This avoids runtime errors if the form is not open.
- Avoid unnecessary OPEN_FORM calls – Use
FIND_FORMto check if the form is already loaded. - Use GO_FORM for better user experience – It allows fast switching between forms without reloading.
- Close unused forms – If too many forms remain open, it can consume memory resources.
- Combine with navigation logic – Often, these built-ins are used inside menu items to manage navigation efficiently.
Conclusion
The FIND_FORM and GO_FORM built-ins in Oracle Forms are essential for managing navigation in multi-form applications. While FIND_FORM helps you determine whether a form is already open, GO_FORM allows you to switch focus to that form without reopening it. Using them together improves performance, prevents duplicate forms, and creates a smoother user experience. By following best practices, you can design forms that are both efficient and user-friendly.

