Like this for example.
Dcl-ds Emailfile Extname('EMAILFILFL') ;
End-ds ;
Dcl-ds DatefldA ;
YYYY Char(4) Pos(1) ;
YY Char(2) Pos(3) ;
MM Char(2) Pos(5) ;
DD Char(2) Pos(7) ;
Ecl-ds Emailfile Extname('EMAILFILFL') ;
End-ds ;
Dcl-ds DatefldA ;
YYYY Char(4) Pos(1) ;
YY Char(2) Pos(3) ;
MM Char(2) Pos(5) ;
DD Char(2) Pos(7) ;
Note that extname is between quotes and is not the last statement in my dcl-xx section
Sent from Yahoo Mail on Android
From:"Kurt Anderson" <Kurt.Anderson@xxxxxxxxxxxx>
Date:Fri, Jul 24, 2015 at 12:18 pm
Subject:RE: Host variable definition for embedded SQL
I believe when using freeform declarations, ExtName literals must have quotes around them (and capitalized).
So try:
// Field Reference File
dcl-ds jcfldr_t ExtName('JCFLDR') Qualified Template;
end-ds;
Instead of:
// Field Reference File
dcl-ds jcfldr_t ExtName(jcfldr) Qualified Template;
end-ds;
Kurt Anderson
Sr. Programmer/Analyst - Application Development, Service Delivery Platform
-----Original Message-----
From: RPG400-L [mailto:rpg400-l-bounces@xxxxxxxxxxxx] On Behalf Of Mark Murphy/STAR BASE Consulting Inc.
Sent: Friday, July 24, 2015 11:44 AM
To: RPG programming on the IBM i (AS/400 and iSeries) <rpg400-l@xxxxxxxxxxxx>
Subject: Re: Host variable definition for embedded SQL
I have also tried taking QUALIFIED off, and get the same issue.
Mark Murphy
STAR BASE Consulting, Inc.
mmurphy@xxxxxxxxxxxxxxx
-----"Mark Murphy/STAR BASE Consulting Inc." <mmurphy@xxxxxxxxxxxxxxx> wrote: -----
To: "RPG programming on the IBM i (AS/400 and iSeries)" <rpg400-l@xxxxxxxxxxxx>
From: "Mark Murphy/STAR BASE Consulting Inc." <mmurphy@xxxxxxxxxxxxxxx>
Date: 07/24/2015 11:32AM
Subject: Host variable definition for embedded SQL
I am trying to avoid redefining things multiple times, but am having no luck with the SQL precompiler. I have my field reference file defined in a common definitions copy book. I also have a separate copy book to hold prototypes for my module, this copy book includes the common definitions copy book. The module contains procedures that define host variables using Like. The definitions are proper for RPG, but not sufficient for SQL. How can I do this a better way? The documentation for embedded SQL says the EXTNAME should work, as long as it doesn't use the third parameter. I am still having trouble with that though. Here are my definitions:
@DTACOM_
// Only define these once
/if defined(@DTACOM)
/eof
/endif
/define @DTACOM
...
// Field Reference File
dcl-ds jcfldr_t ExtName(jcfldr) Qualified Template;
end-ds;
@EMPCOM_
/copy qilesrc,@dtacom_
dcl-pr GetEmployeeName Like(jcfldr_t.ename);
empno Like(jcfldr_t.empno) const;
end-pr;
dcl-pr GetDefaultEmployeeForMachine Like(jcfldr_t.mdempno);
empno Like(jcfldr_t.micno) const;
end-pr;
@EMPCOM
ctl-opt Option(*SrcStmt : *NoDebugIo) DatFmt(*ISO)
NoMain;
*-------------------------------------------------------------------------------------
* Common Employee Procedures
*-------------------------------------------------------------------------------------
/copy qilesrc,@empcom_
/copy qilesrc,@msgcom_
exec sql set option sqlca = *no,
commit = *none,
datfmt = *iso;
// ---------------------------------------------------------------------
// GetEmployeeName
// Returns the employee name for the provided employee number
//
// Parameters
// empno - Input - Employee Number
// ---------------------------------------------------------------------
dcl-proc GetEmployeeName Export;
dcl-pi *n Like(jcfldr_t.ename);
empno Like(jcfldr_t.empno) const;
end-pi;
dcl-s name Like(jcfldr_t.ename) Inz('');
dcl-s message Like(@msgcom_t.SqlDiagnostics) Inz('');
exec sql
select ename
into :name
from jcempf
where empno = :empno;
if %subst(SqlState:1:2) > '02';
exec sql get diagnostics condition 1
:message = message_text;
SndSqlMsg('@EMP01: ' + message);
endif;
return name;
end-proc;
// ---------------------------------------------------------------------
// GetEmployeeName
// Returns the employee name for the provided employee number
//
// Parameters
// empno - Input - Employee Number
// ---------------------------------------------------------------------
dcl-proc GetDefaultEmployeeForMachine Export;
dcl-pi *n Like(jcfldr_t.mdempno);
micno Like(jcfldr_t.micno) const;
end-pi;
dcl-s mdempno Like(jcfldr_t.mdempno) Inz(0);
dcl-s message Like(@msgcom_t.SqlDiagnostics) Inz('');
exec sql
select mdempno
into :mdempno
from jcmcmx
where micno = :micno;
if %subst(SqlState:1:2) > '02';
exec sql get diagnostics condition 1
:message = message_text;
SndSqlMsg('@EMP02: ' + message);
endif;
return mdempno;
end-proc;
So what does the manual mean by: "The precompiler supports EXTNAME, but does not support EXTNAME(filename : fmtname : fieldtype), where fieldtype is *ALL, *INPUT, *OUTPUT, or *KEY."
It sounds pretty clear to me, but I must be missing something since I get errors on :name, :empno, :mdempno, and :micno.
Same error for each field: SQL0312: Position <20 or 29> Variable <fieldname> not defined or not usable.
When I look at the SQL Precompiler listing cross-reference the fields look like this:
CROSS REFERENCE
Data Names Define Reference
EMPNO 430 440
MDEMPNO 463 468
MICNO 460 470
NAME 433 438
The odd thing about this is that id doesn't tell how these fields were defined, just where they are defined, and jcfldr_t is not listed in the cross-reference, though I can see in the source listing that it is being included. In my compile command, RPGPPOPT(*LVL2) is set. I have tried with and without TEMPLATE.
Mark Murphy
STAR BASE Consulting, Inc.
mmurphy@xxxxxxxxxxxxxxx
--
This is the RPG programming on the IBM i (AS/400 and iSeries) (RPG400-L) mailing list To post a message email: RPG400-L@xxxxxxxxxxxx To subscribe, unsubscribe, or change list options,
visit:
http://lists.midrange.com/mailman/listinfo/rpg400-l
or email: RPG400-L-request@xxxxxxxxxxxx
Before posting, please take a moment to review the archives at
http://archive.midrange.com/rpg400-l.
--
This is the RPG programming on the IBM i (AS/400 and iSeries) (RPG400-L) mailing list To post a message email: RPG400-L@xxxxxxxxxxxx To subscribe, unsubscribe, or change list options,
visit:
http://lists.midrange.com/mailman/listinfo/rpg400-l
or email: RPG400-L-request@xxxxxxxxxxxx
Before posting, please take a moment to review the archives at
http://archive.midrange.com/rpg400-l.
As an Amazon Associate we earn from qualifying purchases.