MC Press Online

Wednesday, Apr 26th

Last updateWed, 26 Apr 2017 9am

You are here: Home ARTICLES Programming RPG Do You Use an ALIAS?

Programming / RPG

Do You Use an ALIAS?

Support MC Press - Visit Our Sponsors

NEW BOOK!

Evolve Your RPG Coding: Move from OPM to ILE ... and Beyond


ORDER YOUR COPY

*******************

Click for this Month's

Bookstore Special Deals

In 7.1, you have a new option that allows you to use the alias names in externally described data structures.

 

Right after my first child was born, I remember admiring him and trying to decide what his name should be. My husband and I had four names picked out, and we liked the combination of any two. We wanted to make sure that our son had the right name. After all, studies show that your name can affect your self-concept—how effective, attractive, and valued you feel. It also affects the way you behave, your personality, and others' impressions of you. So we knew that we had an important decision to make and took it seriously. Names are not only important for people, but for products and other things too. History has shown that products with bad names don't sell well. As programmers, we know that the names we give variables, procedures, tables, and other objects need to be descriptive and self-documenting. So it's nice that we are able to use long, descriptive names for our columns and records. What isn't so nice is that when we use a file with long, descriptive names as externally described files in RPG, we get stuck with the short and sometimes cryptic names as subfields.

 

Thankfully, in 7.1, there is a new keyword to tell the RPG compiler and SQL precompiler that we want to use the long or alias names when creating an externally described data structure. The new keyword is ALIAS, and it can be used on the F-spec and the D-spec.

 

The ALIAS keyword is allowed on the F-spec when the compiler does not generate input or output specs. This would be in cases where the TEMPLATE or QUALIFIED keyword is used, as well as for local files defined in subprocedures. The alias names will be used as the subfield names for data structures defined with the LIKEREC keyword for the files specified with the ALIAS keyword. If an alias name does not exist, the standard external name is used. The ALIAS keyword can be used on any externally described data structure in the D spec.

Example 1

My DDS specification for MYFILE looks like this:

 

A          R MYREC                             

A            EMPNM         30A         ALIAS(EMPLOYEE_NAME)      

A            DEPT_ID        4A         ALIAS(DEPARTMENT_NAME)

A            BAND           1A                         

 

In the RPG source:

 

Fmyfile    if   e             disk    QUALIFIED ALIAS            

 

The subfields of the LIKEREC data structure would be…

  • EMPLOYEE_NAME
  • DEPARTMENT_NAME
  • BAND

 

When using this new feature, you need to remember that the rules for the PREFIX keyword are different for the alias names. If there is a second parameter on the PREFIX keyword, the subfields with an alias name will not have characters replaced, but just have the prefix added to the long name. Similarly, if the first parameter of the PREFIX keyword is double quotes ('') with a length specified in the second parameter, the subfields that do not have alias names will have characters removed. The subfields that have alias names will have no characters removed. If there is not a second parameter specified on the PREFIX keyword, the prefix is added to the alias name.

 

There are two other things to remember when using ALIAS. The EXTFLD keyword does not support continuation, and if you specify ALIAS, you need to be able to enter the entire alias name. The second is, if the alias name is enclosed in quotes, the standard external name is used, not the alias name.

 

Let's look at two more examples.

Example 2

My DDS specification for MYFILE2 looks like this:

 

A          R MYREC2                                               

A            XYZPRODNM      40A         ALIAS(PRODUCT_NAME)        

A            XYZSKU          8A                                

 

In RPG source:

 

Fmyfile2   if   e             disk    ALIAS QUALIFIED PREFIX(NEW_)              

 

The subfields of the LIKEREC data structure would be…                        

  • NEW_PRODUCT_NAME                                   
  • NEW_XYZSKU

                                            

 Fmyfile2   if   e             disk    ALIAS QUALIFIED PREFIX(AAA_:3)           

 

The subfields of the LIKEREC data structure would be…                             

  • AAA_PRODUCT_NAME                                
  • AAA_SKU

 

 Fmyfile2   if   e             disk    ALIAS QUALIFIED PREFIX('':3)             

 

The subfields of the LIKEREC data structure would be…                           

  • PRODUCT_NAME                                    
  • SKU                                           

                 

Example 3                                                                                                              

I have a table that is defined like this:

 

CREATE TABLE MYTAB(                             

 LONG_COLUMN_NAME_THAT_WOULD_BE_AN_ALIAS_NAME INT,              

 SECOND_LONG_COLUMN_NAME_THAT_IS_LONGER_THAN_THE_FIRST

INT,   "col %$¢&%# 23" int)

                              

In RPG source:

 

D DS1           E DS                  EXTNAME(MYTAB) QUALIFIED ALIAS     

D                                     PREFIX('A_')             

 

The subfields of DS1 would be…

  • A_LONG_COLUMN_NAME_THAT_WOULD_BE_AN_ALIAS_NAME
  • A_SECOND_LONG_COLUMN_NAME_THAT_IS_LONGER_THAN_THE_FIRST
  • A_COL__00001

 

As you can see, the ALIAS keyword allows you to utilize the long and descriptive names. Now it is up to you to name wisely.  

as/400, os/400, iseries, system i, i5/os, ibm i, power systems, 6.1, 7.1, V7,

Gina Whitney

Gina Whitney is a staff software engineer at IBM in SQL development for DB2 for i5/OS. She is responsible for the SQL precompilers. Gina is located in Rochester, Minnesota and can be reached at whitneyg@us.ibm.com.

BLOG COMMENTS POWERED BY DISQUS