Executing the SYSTEM statement on UNIX
In SPL procedures for UNIX™ platforms, a specification that evaluates to a valid UNIX operating system command must immediately follow the SYSTEM keyword.
Both of the program fragments that follow use the SYSTEM statement
of SPL to send a message to the system administrator.
- In the first example, the sensitive_update routine defines an SPL variable called mailcall to store a character string that specifies the name of the mail utility, and the user ID of the message recipient, and the message text.
- In the second example, the sensitive_update2 routine similarly invokes the mail utility with a SYSTEM statement. The expression constructs a valid command line by concatenating three quoted strings and the SPL variables user1 and user2 to send to the system administrator a file called violations_file.
Sending email using the SYSTEM statement
The SYSTEM statement in the following example of an SPL routine
causes the UNIX operating system
to send a mail message to the system administrator whose user ID is headhoncho:
CREATE PROCEDURE sensitive_update()
...
LET mailcall = 'mail headhoncho < alert';
-- code to execute if user tries to execute a specified
-- command, then sends email to system administrator
SYSTEM mailcall;
...
END PROCEDURE; -- sensitive_update
You can use a double-pipe symbol (
||
) to concatenate
expressions within a SYSTEM statement, as the following example shows:
CREATE PROCEDURE sensitive_update2() DEFINE user1 char(15); DEFINE user2 char(15); LET user1 = 'joe'; LET user2 = 'mary'; ... -- code to execute if user tries to execute a specified -- command, then sends email to system administrator SYSTEM 'mail -s violation' || user1 || ' ' || user2 || '< violation_file'; ... END PROCEDURE; --sensitive_update2
In both examples above, blank spaces separate elements of the command line, so the expression that follows the SYSTEM keyword evaluates to a character string that conforms to the syntax requirements of the operating system mail utility.