The Death of OPNQRYF

Business Intelligence
  • Smaller Small Medium Big Bigger
  • Default Helvetica Segoe Georgia Times

Did the title of this article get your attention? I hope so. It certainly grabbed my attention as the subject of an email I received from Howard Arner back in early October. He forwarded a clipping to me from an IBM press release in case I hadn’t seen it. (I hadn’t.)

I’ll share the clipping with you in just a moment, but first, let me summarize it for you: IBM will not provide native access to new features of the iSeries database after V4R5. You must use SQL.

This news was not surprising to me. I was already aware that there is no way to define binary large objects (BLOBs) in DDS. Also, in mid-May I had a phone conversation with two IBMers about the features that would be coming out in V4R5. They would tell me about a new database feature and I would ask, “Is that available through the native interfaces?” The reply was either “No” or “We’ll have to check on it and get back to you.” A month later, I attended a briefing at the IBM center in Rochester, Minnesota, where one of those two IBMers announced that IBM was putting money into SQL, not into the native interfaces.

Here is the announcement, in its entirety. For some time now, SQL has been the strategic interface for the industry and the AS/400 database, DB2 Universal Database for AS/400. IBM has focused the database investment on SQL and has made some new database functionality (e.g., BLOBs, ROUND & DAYOFWEEK scalar functions, Derived Tables, etc.) available only on SQL interfaces. As a result, non-SQL interfaces such as OPNQRYF were not enhanced to access these new database features. Although it’s not a common practice, native opens (OPNQRYF, OPNDBF, high-level language opens) currently can reference most SQL Views (an SQL View is just a logical file), so it is possible to create an SQL View that uses some of the newer database functionality and then have a native open reference that SQL View to access these newer features.

To focus more investment on the SQL interface, IBM’s plans dictate that after V4R5 new SQL database features and functions must be accessed directly using SQL

interfaces. The opening of SQL Views via a native open interface will continue to be supported but will be limited to views that use database features available in V4R5 and earlier releases. However, if a new SQL view is created or an existing SQL View is recreated to use a new database feature delivered in a release after V4R5, the open will fail.

Native opens also may fail against SQL Views created and shipped by software vendors—if their view uses a database feature not available in V4R5.

The Case for SQL Interfaces

SQL has the advantage of being an industry-standard database access language. That is, learn to use SQL on the iSeries, and you’ll know how to use SQL on other platforms and with other databases like Oracle, SQL Server, or Sybase. An SQL interface can be used natively and from many different clients. This allows tools such as Client Access/400, Operations Navigator, ODBC, and Java Database Connectivity (JDBC) to manipulate OS/400 data and objects. But the best thing about SQL, in my opinion, is that it helps move data access logic out of programs and into databases. User-defined functions and stored procedures are coded routines that can be implemented by any client that communicates with the database through SQL. SQL views can be created that repackage and redeploy your data in ways not possible with DDS logical files. Combine them with triggers and constraints and you’ve got one powerful database with integrity that’s not dependent on application programs.

It’s also very easy to use SQL to access data in complex ways with a minimum understanding of how the data is to be processed. This can get you into trouble, but it is also very powerful.

The Case for Native Interfaces

The first relational database management system I ever used was Oracle. To access the database from a COBOL program, I had to embed calls using the Call Level Interface (CLI). Those calls passed SQL commands through parameters to Oracle. It was more cumbersome than using the COBOL I/O verbs—READ, WRITE, REWRITE—but I assumed that that was the way it had to be when accessing relational databases from a high- level language.

Then I got a job in a S/38 shop. I was amazed that I could access a database table or view as I had accessed files on the S/34 and S/36. I could even use the RPG cycle. From that point on, I had no more use for Oracle’s CLI than I did for #GSORT.

The database didn’t even have a name. It was just a built-in relational database, tightly integrated with the rest of the system. Native access to the database was one of the reasons the S/38 was such a wonderful system on which to develop applications.

IBM’s decision to promote the SQL interface to the database means that what I consider to be the most distinctive feature of iSeries database access—the native interface—will be reduced in importance. Instead of using “iSeries,” maybe IBM should have chosen YAS/400 as the new name for the AS/400. (YAS would, of course, stand for “yet another server.”)

And the Winner Is...

You’ll have to make up your own mind, but I believe the move to SQL is a good one. I believe that iSeries shops that are not using SQL to build applications should rethink their development methodology.

IBM ends the announcement with the following appeal: “Your questions and comments are important to us, please contact us at: This email address is being protected from spambots. You need JavaScript enabled to view it..” If you respond, please consider including me in the cc: list; I’d be very interested in hearing what you have to say.