They're four ways to reference variables in APEX:
- :Bind_variables
- &Substitution_strings.
- V / NV functions
- #Hash#
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:
Where P1_DEPTNO is a page item that you created.
SELECT ename
FROM emp
WHERE deptno = :p1_deptno
Substitution Strings
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:
V / NV Functions
Hello &APP_USER.
Welcome to the demo application.
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:
#Hash#
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.
For more information about referencing variables in APEX read the Referencing Session State section in the builder guide.
Is it possible to use substitution strings in helptext? It's not working for me.
ReplyDeleteI just tested on apex.oracle.com (which is using version 4.0.2.00.07) and you can use substitution strings in help text.
ReplyDeleteWhat version of APEX are you using?
I'm using 4.0.2.00.07 as well.
ReplyDeleteOh I guess I should've specified that it's help text within a table column of an interactive report.
something in the format of &P1_TEXT. does not work :/
Hi,
ReplyDeleteI just tested it and it works in an IR. Does your item have a value when the IR is being generated?
If you want please send me an email (address is on the top right of the blog) and we can trouble shoot it.
Martin
Oh don't worry about it. I've found a way to work around the problem. Thanks for the help though.
ReplyDeleteGood Post Martin.
ReplyDeleteWhat if the variable is not a page item (like P1_DEPTNO for example) but a report column (like RC_DEPTNO for example).
ReplyDeleteHow can I refer to this report column? :RC_DEPTNO? It is not working
Report columns can be referenced when editing the column itself and you should use the #COLUMN_NAME# notation. This variable is only valid in the column attributes.
DeleteSo you cannot reference a Report column outside of the Report?
DeleteHi Nick,
DeleteThe simple answer is no, you can't access a report column outside of a report. You can however create a custom report template which references the column position.
Martin