When I first started using APEX I was unsure about which method to use when referencing variables (values in session state). The purpose of this post is to outline the different ways to reference APEX variables and provide an examples for each case.
They're five ways to reference variables in APEX:
- V / NV functions
Bind variables can be used in any block of SQL or PL/SQL code inside APEX. For example if creating a report to display all the employees in a selected department the query would be:
SELECT ename FROM emp WHERE deptno = :p1_deptno
P1_DEPTNO is a page item that you created.
Substitution strings use the
&variable. notation. They can be used anywhere in your APEX application such as a HTML region or even a template. You can also use them in inline SQL and PL/SQL code but it is not recommended for security reasons. For more information on this security risk read the following Oracle white paper on SQL Injection
A simple example of using a substitution string is in a HTML region which displays a welcome message. The region source would be:
>Hello &APP_USER. Welcome to the demo application.
V / NV Functions
If you want to reference APEX variables in compiled code, such as views, packages, and procedures, you can't use bind variables. The easiest way to reference the variables is to use the
V (for strings) and
NV (for numbers) functions. For example:
CREATE OR REPLACE PROCEDURE log_apex_info AS BEGIN INSERT INTO tapex_log ( username, apex_page_id, access_date) VALUES (V ('APP_USER'), NV ('APP_PAGE_ID'), SYSDATE); END;
The hash notation of
#variable# is used in multiple places. When creating column links in a report you can use the hash notation to represent column values. The following figure highlights how column values are referenced in a report link.
#EMPNO# is used to reference the EMPNO column and
#JOB# is used to pass the job as a parameter to Page 2.
The hash notation is also used in templates (Shared Components > Templates). When modifying a template they're special variables available depending on the type of template. These variables can be found at the bottom of the screen in the Substitution Strings section.
Shortcuts can only be used in specific areas within APEX (such as some regions, labels, and templates) and can be rendered both statically or dynamically (using PL/SQL functions). To reference a Shortcut use the
"shortcutname" notation (quotes included). The following article covers Shortcuts in more detail, including where you can use them in APEX: http://www.talkapex.com/2014/02/apex-shortcuts.html
For more information about referencing variables in APEX read the Referencing Session State section in the builder guide.