AbairTechSolutionDIGITAL SOLUTIONS FOR A SMARTER TOMORROW

Menu

Oracle Forms · Interview Prep

Oracle Forms Interview Questions and Answers: 25 Questions with Clear Explanations

By AbairTech Solution · Practical guides for Oracle, ERP & business software

Published by AbairTech Solution · Reviewed November 2026 · Editorial policy

Oracle Forms still runs critical systems in banks, textile mills, universities, hospitals and government departments. Companies maintaining these systems – or planning to modernize them – need developers who understand Forms deeply. These questions cover the topics interviewers ask most often. Click a question to see the answer, then try our free Oracle APEX & Forms quiz.

Basics

1. What is Oracle Forms?

Oracle Forms is Oracle’s tool for building data-entry and query screens directly on the Oracle Database, with business logic written in PL/SQL. Applications are designed in Forms Builder and run through the Forms Services runtime, with users accessing them through a browser-launched Java client or, in newer releases, the Forms Standalone Launcher.

2. What module types exist, and what are their file extensions?
  • Form module: .fmb (source), .fmx (compiled)
  • Menu module: .mmb / .mmx
  • PL/SQL library: .pll / .plx
  • Object library: .olb
3. What is the difference between a data block and a control block?

A data block is based on a table, view, procedure or query, and Forms handles querying, inserting, updating and deleting automatically. A control block is not linked to any data source; it holds buttons, calculated fields or parameters.

4. What canvas types are available?

Content (the base canvas of a window), stacked (displayed on top of a content canvas, often shown and hidden), tab (tab pages) and toolbar (horizontal or vertical toolbars).

5. What is the difference between modal and modeless windows?

A modal window must be closed before the user can work in other windows. A modeless window allows the user to switch freely between windows.

Triggers

6. At which levels can triggers be defined?

At form, block and item level. By default the most specific trigger fires – an item-level trigger overrides a block-level trigger of the same name – unless the execution hierarchy property is changed to fire before or after the higher-level trigger.

7. What is WHEN-VALIDATE-ITEM used for?

It fires when an item’s value has changed and the item is being validated, typically when the user navigates out of it. It is the right place for item-level business rules. Raising FORM_TRIGGER_FAILURE keeps the cursor in the item.

8. PRE-QUERY vs POST-QUERY?

PRE-QUERY fires once before a block’s query is executed – used to add or change query criteria. POST-QUERY fires once for each fetched record – used to populate non-database items such as descriptions. Heavy SQL in POST-QUERY slows queries because it runs for every row.

9. Name common transactional triggers.

PRE-INSERT, POST-INSERT, PRE-UPDATE, POST-UPDATE, PRE-DELETE, POST-DELETE, PRE-COMMIT and POST-COMMIT. A typical use of PRE-INSERT is assigning a primary key from a sequence.

-- PRE-INSERT on the ORDERS block
SELECT orders_seq.NEXTVAL INTO :orders.order_id FROM dual;
10. What are ON- triggers?

ON- triggers such as ON-INSERT, ON-UPDATE, ON-LOCK and ON-ERROR replace Forms’ default processing. For example, ON-INSERT can call a stored procedure instead of the default insert. ON-ERROR lets you show friendly messages instead of default error text.

Built-ins

11. What are restricted and unrestricted built-ins?

Restricted built-ins affect navigation (for example GO_ITEM, GO_BLOCK, NEXT_RECORD) and cannot be used in triggers that fire during navigation or validation, such as WHEN-VALIDATE-ITEM. Unrestricted built-ins (for example SET_ITEM_PROPERTY, MESSAGE) can be used in any trigger.

12. Difference between CALL_FORM, OPEN_FORM and NEW_FORM?
  • CALL_FORM opens another form while keeping the calling form active in the background; control returns when the called form exits.
  • OPEN_FORM opens another form in parallel, allowing the user to switch between independent forms.
  • NEW_FORM exits the current form and replaces it with the new one.
13. How do you change the WHERE clause of a block at runtime?

Use SET_BLOCK_PROPERTY with DEFAULT_WHERE to change it for subsequent queries, or ONETIME_WHERE to apply it to the next query only, then call EXECUTE_QUERY.

SET_BLOCK_PROPERTY('ORDERS', DEFAULT_WHERE, 'status = ''OPEN''');
GO_BLOCK('ORDERS');
EXECUTE_QUERY;
14. How do you display an alert and read the user’s choice?
DECLARE
  l_btn NUMBER;
BEGIN
  l_btn := SHOW_ALERT('CONFIRM_DELETE');
  IF l_btn = ALERT_BUTTON1 THEN
    DELETE_RECORD;
  END IF;
END;
15. What does COMMIT_FORM do?

It posts all pending changes in the form to the database (firing the relevant validation and transactional triggers) and then commits. :SYSTEM.FORM_STATUS can be checked afterwards to confirm the result.

Data and design

16. How are master-detail relationships handled?

A relation object links a master and a detail block by a join condition. Forms then coordinates the detail query automatically. Delete behaviour can be non-isolated (prevent master delete while details exist), cascading (delete details too) or isolated (delete only the master).

17. What is the difference between a record group and an LOV?

A record group is an in-memory table of rows, often based on a query. An LOV is the pop-up list the user sees, and it gets its data from a record group. One record group can feed several LOVs.

18. Global variables vs parameters?

Global variables (:GLOBAL.name) are character values available to all forms in the session. Parameters are declared in a form and passed in through a parameter list when calling it – a cleaner, more explicit way to pass values between forms.

19. What are property classes and visual attributes?

A property class is a reusable set of properties that objects inherit, ensuring consistency. A visual attribute holds font and colour settings that can be applied to items, often changed at runtime, for example to highlight the current record.

20. Name some useful SYSTEM variables.

:SYSTEM.CURSOR_ITEM, :SYSTEM.CURSOR_BLOCK, :SYSTEM.CURSOR_RECORD, :SYSTEM.FORM_STATUS, :SYSTEM.RECORD_STATUS, :SYSTEM.MODE (NORMAL or ENTER-QUERY) and :SYSTEM.TRIGGER_ITEM.

Operations and modernization

21. How do you call an Oracle Report from Forms?

In web-deployed Forms, use RUN_REPORT_OBJECT to submit the report to the Reports Server, then WEB.SHOW_DOCUMENT to display the output in the browser. Older client-server code using RUN_PRODUCT must be converted during upgrades.

22. How do you compile forms in bulk?

Use the Forms compiler from the command line (frmcmp or frmcmp_batch, depending on the version and platform) in a script that loops over all .fmb, .mmb and .pll files, so every module is compiled against the same libraries and database.

23. Where should business logic live – in triggers or in the database?

Rules that must apply no matter which screen or API changes the data belong in database packages and constraints. Forms triggers should focus on user interaction and call those packages. This also makes a later move to APEX much easier.

24. Why are companies moving from Oracle Forms to Oracle APEX?

To get browser-native, mobile-friendly screens without Java client plugins, reduce middleware complexity, attract developers more easily and reuse existing PL/SQL. Read Oracle Forms vs Oracle APEX for a full comparison.

25. How would you speed up a slow form?

Check the queries first: indexes for search criteria, avoiding per-row lookups in POST-QUERY (use views or joins), limiting rows fetched, and reducing unnecessary round trips in WHEN-VALIDATE triggers. Trace the session in the database to find the slow SQL.

Test yourself: take the 20-question Oracle APEX & Oracle Forms quiz. Moving to APEX? Read the Oracle APEX interview questions too.

Maintaining or modernizing Oracle Forms?

AbairTech supports Oracle Forms 6i–12c applications and migrates them to Oracle APEX in safe, phased steps.

Forms to APEX MigrationMore Guides