QMF Z Client with Procedures and REXX Logic
Introduction
Mainframes remain the backbone of enterprise data management. With IBM's Query Management Facility (QMF) Z Client, business users and developers can create queries, reports, and batch jobs on z/OS.
But did you know that QMF can do much more than just queries?
One of its most powerful features is the ability to create Procedures with Logic - combining QMF commands with REXX scripting to build intelligent, automated workflows.
In this blog, we'll explore how this works, why it matters, and walk through a practical example.
What Are Procedures with Logic?
- Standard QMF Procedures
Normally, a procedure in QMF is just a list of QMF commands (RUN QUERY, SAVE DATA, EXPORT, etc.) executed in sequence.
- Procedures with Logic
When you add REXX programming statements to your procedure, you can:
- Add conditional execution (e.g., run only on Mondays).
- Include loops, variables, and error handling.
- Dynamically interact with QMF global variables.
- Build mini-applications that automate reporting and data export.
This hybrid capability makes QMF more than a reporting tool-it becomes a programmable BI environment.
How It Works
- Start with a REXX script
Every procedure with logic begins like this:
- /* REXX */
- Switch to QMF Command Environment
Use:
- ADDRESS QRW
This tells REXX that the following commands are QMF commands.
- Mix QMF + REXX
- QMF commands go in quotes ("RUN QUERY MYQUERY").
- REXX code (like loops, conditionals) runs outside quotes.
Example 1: Hello World with QMF
/* REXX */
SAY "Hello! This is a QMF + REXX procedure."
ADDRESS QRW
"RUN QUERY SALESQ"
SAY "Query completed."
Here, QMF runs a query called SALESQ, while REXX provides messages to the user.
Example 2: Weekly Report (Only on Mondays)
This example shows conditional logic: only run the report if it's Monday.
/* REXX */
ADDRESS QRW
if date('W') = 'Monday' then
do
"RUN PROC WEEKLY_SALES"
SAY "Weekly report generated!"
end
else
do
SAY "Sorry, reports only run on Mondays."
end
exit 0
error:
exit 8
This script prevents accidental report runs on the wrong day, reducing workload on Db2.
Example 3: Export with Dynamic Variables
You can even pass variables between REXX and QMF global variables:
/* REXX */
salesRegion = 'APAC'
ADDRESS QRW
"SET GLOBAL (REGION="salesRegion")"
"RUN QUERY REGION_SALES"
"EXPORT TABLE SALES_DATA TO 'APAC_WEEKLY'"
The value of salesRegion is sent into a QMF global variable, driving the query dynamically.
Why Use Procedures with Logic?
- Automation → No need for manual steps; procedures run unattended.
- Consistency → Standardized, repeatable workflows across teams.
- Error handling → Exit codes (exit 0, exit 8) and REXX error signals improve reliability.
- Flexibility → Mix business rules and data logic in one place.
This feature turns QMF into more than just a reporting tool-it becomes a data automation framework for z/OS.
Practical Use Cases
- Scheduled Reports → Generate and export weekly/monthly reports without user intervention.
- Data Quality Checks → Run queries and automatically alert if anomalies are found.
- Conditional Exports → Export data only if certain thresholds are exceeded.
- Interactive Applications → Use SAY and PULL in REXX to interact with users at runtime.
Conclusion
Procedures with Logic in QMF Z Client allow organizations to blend the power of SQL and QMF commands with the flexibility of REXX scripting.
This is a perfect example of how modern mainframe tools combine classic reliability with programmable intelligence.
------------------------------
Shashank Sonavane
------------------------------