|
Thanks, I am now trying to test this, but it is bombing with decimal data
error when I try to open the second cursor. At this point the first
cursor has opened Ok, and placing data in fields whose naming starts W0
(zero), within a data structure.
I had created where the first cursor places the data by copying the first
cursor, intending to change only the selection criteria (types of lines),
and sequence (description text), so the various fields ought to agree,
numeric, alpha, but I will be double checking that carefully, in case I
dropped some field, which would offset what's alpha or numeric.
I figured first cursor (B1) would not need all the fields, that second
cursor uses, but was postponing shrinking the collection until I developed
rest of modification, in case more fields ended up being needed than my
initial anticipation.
The two W0 fields, via first cursor, are defined numerical, but not yet
populated with anything.
The two fields they being matched with are also numbers.
I am wondering if I should delay opening second cursor until after first
read of data into first cursor.
There's a bunch of other cursors in the program.
i define them all.
I open them all
I use them in the program
I close them all
The cursor that won't open reads:
C/EXEC SQL
C+ DECLARE C1 CURSOR FOR SELECT
C+
OORD,SQREQ,SOFAC,IPROD,IDESC,IFII,IITYP,ICLAS,OOPNO,OWRKC,OOPDS,OTOOL,OOPER,OSTAT,SORTEM,OCDTE
C+ FROM FSO,IIM,FRT,FOD WHERE SID='SO' AND IID='IM' AND
C+ RID='RT' AND ODID IN('OD','RD') AND SPROD=IPROD AND SPROD=RPROD
C+ AND SORD=OORD AND ROPNO=OOPNO AND OSTAT IN('1','3')
C+ AND OORD=:W0ORD AND OOPNO>=:W0OPNO
C+ GROUP BY
C+
OORD,SQREQ,SOFAC,IPROD,IDESC,IFII,IITYP,ICLAS,OOPNO,OWRKC,OOPDS,OTOOL,OOPER,OSTAT,SORTEM,OCDTE
C+ ORDER BY OORD,OOPNO,OSTAT
C/END-EXEC
*
I believe the problem is with data in the line
C+ AND OORD=:W0ORD AND OOPNO>=:W0OPNO
Hi,
I'd solve it with 2 cursors. With the first cursor I'd read all status 1
and
for each row selected by this cursor I'd read the the rest of the lines
for
this status 1 line. If you want to solve it with a single SQL-Statement
you
might have a look at UNION to merge the two "cursors".
>>I also do not remember if SQL can read two different logicals of the
same
physical, which would complicate field identification.
First SQL never reads a logical file, only the physical file. Access
Paths
(either in SQL indexes or DDS described keyed logical file) are only
used to
get access to the data in the physical files. If you specify a logical
file
in an SQL Statement, the SQL statement gets rewritten based on the
physical
files, considering the where and join clauses. In an second step the
optimal
access paths is determined by the optimizer from all existing access
path
defined over the physical file. The access path finally used may or may
not
be the access paths defined in the DDS described logical file.
Also specifying a logical file in a SQL-Statement cause the query
dispatcher
to reroute the execution of the SQL-Statement to the old (classic) query
engine, i.e. it cannot profit from the advantages of the new SQL Query
engine. This rerouting may cost up to 15% performance.
But it is possible to specify the same physical file several times in
the
same SQL-statement, i.e. it can be joined by itself. To distinguish
between
these physical files, you have to use a correlation variable, i.e. you
rename the file temporarily and qualify the field names with this
correlation variable.
Mit freundlichen Gru:ssen / Best regards
Birgitta Hauser
"Shoot for the moon, even if you miss, you'll land among the stars."
(Les
Brown)
"If you think education is expensive, try ignorance." (Derek Bok)
-----Urspru:ngliche Nachricht-----
Von: midrange-l-bounces@xxxxxxxxxxxx
[ mailto:midrange-l-bounces@xxxxxxxxxxxx] Im Auftrag von Al Mac
Gesendet: Monday, January 22, 2007 02:31
An: midrange-l@xxxxxxxxxxxx
Betreff: SQL Sub Sort
I am using SQL embedded in RPG/400 to generate data sequenced by
stage of
manufacturing, and sequential number of instructions how to
manufacture
it. The first text line of each stage is an overall description, and
that
first line is also "status" type code "1". They want me to
resequence
this, so each group of instructions on a mfg stage is sorted by that
status "1" description, but continue rest of text lines that come
after
each "1" to remain in that sequence. There's nothing to tell
software
that this bunch of text lines "goes with" a first description, other
than
being sequential operation #s until the next status type"1" line I do
not
know if this is doable, or how to do it. I can do ILE, I am just not
good
at it.
Data formatted
* status "1" description is of what we are doing in each stage of
manufacturing, with an operation # like 100
* then there are a bunch of text lines of other than status "1",
with
operation #s like 101 102 103 etc. that print after the status
"1"
...
we only print until hit another status "1", which might be
operation
150
* right now I am printing this in operation sequence, then when it
hits
a new status "1", doing like a control break
* Then humans physically sort my output so it is organized by the
type
of work to be done, which takes them hours. They want the
computer
to
pre-sort for them.
Here's how the code currently reads
/EXEC SQL
DECLARE C1 CURSOR FOR SELECT
SORD,SQREQ,SOFAC,IPROD,IDESC,IFII,IITYP,ICLAS,OOPNO,OWRKC,OOPDS,OTOOL,OOPER,
OSTAT,SORTEM,OCDTE
FROM FSO,IIM,FRT,FOD WHERE SID='SO' AND IID='IM' AND
RID='RT' AND ODID IN('OD','RD') AND SPROD=IPROD AND SPROD=RPROD AND
SORD=OORD AND ROPNO=OOPNO AND OSTAT IN('1','3')
GROUP BY
SORD,SQREQ,SOFAC,IPROD,IDESC,IFII,IITYP,ICLAS,OOPNO,OWRKC,OOPDS,OTOOL,OOPER,
OSTAT,SORTEM,OCDTE
ORDER BY SORD,OOPNO,OSTAT
/END-EXEC
For those of you that recognize this as BPCS ... we are version 405
CD
It
has been a while since I modified this. I not see right now what role
master FRT file is playing, which is where FOD file got the data
needed
for current shop order.
Description FOD.OOPDS & FRT.ROPDS
Status FOD.OSTAT & FRT.RSTAT
Operation FOD.OOPNO & FRT.ROPNO
Shop Order only in Order files FSO.SORD & FOD.OORD
Parent Item in several files, includes FRT.RPROD & FSO.SPROD
I also do not remember if SQL can read two different logicals of the
same
physical, which would complicate field identification.
-
Al Macintyre
http://en.wikipedia.org/wiki/User:AlMac
http://www.ryze.com/go/Al9Mac
BPCS/400 Computer Janitor ... see
http://radio.weblogs.com/0107846/stories/2002/11/08/bpcsDocSources.html
--
This is the Midrange Systems Technical Discussion (MIDRANGE-L) mailing
list
To post a message email: MIDRANGE-L@xxxxxxxxxxxx To subscribe,
unsubscribe,
or change list options,
visit: http://lists.midrange.com/mailman/listinfo/midrange-l
or email: MIDRANGE-L-request@xxxxxxxxxxxx
Before posting, please take a moment to review the archives
at http://archive.midrange.com/midrange-l.
--
This is the Midrange Systems Technical Discussion (MIDRANGE-L) mailing
list
To post a message email: MIDRANGE-L@xxxxxxxxxxxx
To subscribe, unsubscribe, or change list options,
visit: http://lists.midrange.com/mailman/listinfo/midrange-l
or email: MIDRANGE-L-request@xxxxxxxxxxxx
Before posting, please take a moment to review the archives
at http://archive.midrange.com/midrange-l.
As an Amazon Associate we earn from qualifying purchases.
This mailing list archive is Copyright 1997-2025 by midrange.com and David Gibbs as a compilation work. Use of the archive is restricted to research of a business or technical nature. Any other uses are prohibited. Full details are available on our policy page. If you have questions about this, please contact [javascript protected email address].
Operating expenses for this site are earned using the Amazon Associate program and Google Adsense.