Home » Other » Marketplace » Pl/Sql, Pro*C Process Code Generator For Oracle (SnapProc)
|
|
|
|
Re: Pl/Sql, Pro*C Process Code Generator For Oracle [message #554377 is a reply to message #554340] |
Mon, 14 May 2012 00:59 |
supertime2000
Messages: 6 Registered: May 2012
|
Junior Member |
|
|
Sample code generated by SnapProc is shown below:
Code is right here
-- -----------------------------------------------------------
-- * AIM : PL/SQL PROCESSING PROGRAM
--
-- * APPLICATION: SAMPLE
--
-- * PROCESS : SPSUMUP
--
-- * GENERATED : ON 1/18/02 12:47:03 PM
-- -------------------------------------------------------------
DECLARE
gl_eof boolean := FALSE; gl_fields boolean := FALSE;
gn_rcnt number := 2; gn_crcnt number := 0;
gc_space char(2) := ' ';
amount float; payment float;
prices_price float; salestax float;
states_tax float; subtotal float;
upord_amnt float; upord_saltax float;
upord_subtot float; pprices_price float;
pstates_tax float; pupord_amnt float;
pupord_saltax float; pupord_subtot float;
cust_custno number; items_orderno number;
items_productno number; items_quantity number;
orders_cust_no number; orders_ordno number;
prices_prodcode number; upord_cust_no number;
pcust_custno number; pitems_orderno number;
pitems_productno number; pitems_quantity number;
porders_cust_no number; porders_ordno number;
pprices_prodcode number; pupord_cust_no number;
orders_ddate date; upord_ddate date;
porders_ddate date; pupord_ddate date;
cust_address char(30); cust_city char(15);
cust_company char(30); cust_firstname char(15);
cust_lastname char(15); cust_mrms char(3);
cust_region char(9); cust_state char(2);
cust_zip char(10); orders_shiptype char(15);
orders_terms char(32); prices_descrptn char(32);
states_abbrev char(2); states_state char(15);
pcust_address char(30); pcust_city char(15);
pcust_company char(30); pcust_firstname char(15);
pcust_lastname char(15); pcust_mrms char(3);
pcust_region char(9); pcust_state char(2);
pcust_zip char(10); porders_shiptype char(15);
porders_terms char(32); pprices_descrptn char(32);
pstates_abbrev char(2); pstates_state char(15);
cust_row char(25); pcust_row char(25);
items_row char(25); pitems_row char(25);
orders_row char(25); porders_row char(25);
prices_row char(25); pprices_row char(25);
states_row char(25); pstates_row char(25);
upord_row char(25); pupord_row char(25);
-- ---------------------------
-- DECLARATION OF THE SELECTS
-- ---------------------------
CURSOR cust_cursor is
SELECT rowid,address,city,company
,custno,firstname,lastname
,mrms,region,state
,zip
FROM spcust
WHERE cust.company=:orders_cust_no;
CURSOR items_cursor is
SELECT rowid,orderno,productno,quantity
FROM spitems
WHERE items.orderno=:orders_ordno;
CURSOR orders_cursor is
SELECT rowid,cust_no,ddate,ordno
,shiptype,terms
FROM sporders
WHERE items.orderno=:orders_ordno;
CURSOR prices_cursor is
SELECT rowid,descrptn,price,prodcode
FROM spprices
WHERE prices.prodcode=:items_productno;
CURSOR states_cursor is
SELECT rowid,abbrev,state,tax
FROM spstates
WHERE states.abbrev=:cust_state;
CURSOR upord_cursor is
SELECT rowid,amnt,cust_no,ddate
,saltax,subtot
FROM spupord
WHERE upord.cust_no=:orders_cust_no;
CURSOR dtsum_cursor is
SELECT rowid,ddate,paymnt
FROM dtsum;
CURSOR comsum_cursor is
SELECT rowid,company,paymnt
FROM comsum;
-- --------- FUNCTION DECLARATION
procedure spsumup_fld;
procedure spsumup_tot;
procedure spsumup_ttl;
procedure spsumup_body;
procedure spsumup_gfr;
procedure spsumup_gnr;
procedure spsumup_clrc;
procedure spsumup_hd1;
procedure spsumup_ft1;
procedure spsumup_clr1;
procedure spsumup_hd2;
procedure spsumup_ft2;
procedure spsumup_clr2;
procedure spsumup_hd3;
procedure spsumup_ft3;
procedure spsumup_clr3;
procedure spsumup_gnr0;
procedure spsumup_gfr0;
procedure spsumup_gnr1;
procedure spsumup_gfr1;
procedure spsumup_summ;
-- ---- END FUNCTION DECLARATION
-- -----------
-- functions
-- -----------
-- ----------------------
-- Clear Composite Record
-- ----------------------
procedure spsumup_clrc is
BEGIN
amount := 0.00;
payment := 0.00;
salestax := 0.00;
return ;
END spsumup_clrc ;
-- --------------
-- Group 1 Header
-- --------------
procedure spsumup_hd1 is
BEGIN
spsumup_hd2;
return ;
END spsumup_hd1 ;
-- --------------
-- Group 2 Header
-- --------------
procedure spsumup_hd2 is
BEGIN
spsumup_hd3;
return ;
END spsumup_hd2 ;
-- --------------
-- Group 3 Header
-- --------------
procedure spsumup_hd3 is
BEGIN
return ;
END spsumup_hd3 ;
-- -----------
-- Write Title
-- -----------
procedure spsumup_ttl is
BEGIN
return ;
END spsumup_ttl ;
-- --------------
-- Group 1 Footer
-- --------------
procedure spsumup_ft1 is
BEGIN
spsumup_ft2;
if comsum_cursor%isopen = false then
OPEN comsum_cursor ;
else
CLOSE comsum_cursor ;
OPEN comsum_cursor ;
end if;
INSERT INTO spcomsum(company,paymnt)
VALUES(pcust_company, payment);
spsumup_clr1;
return ;
END spsumup_ft1 ;
-- --------------
-- Group 2 Footer
-- --------------
procedure spsumup_ft2 is
BEGIN
spsumup_ft3;
if dtsum_cursor%isopen = false then
OPEN dtsum_cursor ;
else
CLOSE dtsum_cursor ;
OPEN dtsum_cursor ;
end if;
INSERT INTO spdtsum(ddate,paymnt)
VALUES(porders_ddate, payment);
return ;
END spsumup_ft2 ;
-- --------------
-- Group 3 Footer
-- --------------
procedure spsumup_ft3 is
BEGIN
if upord_cursor%isopen = false then
OPEN upord_cursor ;
else
CLOSE upord_cursor ;
OPEN upord_cursor ;
end if;
UPDATE spupord
SET spupord.saltax = salestax, spupord.subtot = subtotal
WHERE rowid = pupord_row ;
return ;
END spsumup_ft3 ;
-- -------------
-- Write Summary
-- -------------
procedure spsumup_summ is
BEGIN
return ;
END spsumup_summ ;
-- ------------------------
-- Move Data to Destination
-- ------------------------
procedure spsumup_fld is
BEGIN
if gl_fields = true then
return;
end if;
pcust_address := cust_address;
pcust_city := cust_city;
pcust_company := cust_company;
pcust_custno := cust_custno;
pcust_firstname := cust_firstname;
pcust_lastname := cust_lastname;
pcust_mrms := cust_mrms;
pcust_region := cust_region;
pcust_state := cust_state;
pcust_zip := cust_zip;
pitems_orderno := items_orderno;
pitems_productno := items_productno;
pitems_quantity := items_quantity;
porders_cust_no := orders_cust_no;
porders_ddate := orders_ddate;
porders_ordno := orders_ordno;
porders_shiptype := orders_shiptype;
porders_terms := orders_terms;
pprices_descrptn := prices_descrptn;
pprices_price := prices_price;
pprices_prodcode := prices_prodcode;
pstates_abbrev := states_abbrev;
pstates_state := states_state;
pstates_tax := states_tax;
pupord_amnt := upord_amnt;
pupord_cust_no := upord_cust_no;
pupord_ddate := upord_ddate;
pupord_saltax := upord_saltax;
pupord_subtot := upord_subtot;
pcust_row := cust_row;
pitems_row := items_row;
porders_row := orders_row;
pprices_row := prices_row;
pstates_row := states_row;
pupord_row := upord_row;
amount := items_quantity*prices_price;
spsumup_tot;
gl_fields := TRUE;
return ;
END spsumup_fld ;
-- ------------------
-- Write Detail Lines
-- ------------------
procedure spsumup_body is
BEGIN
spsumup_fld;
return ;
END spsumup_body ;
-- -----------------
-- Accumulate Totals
-- -----------------
procedure spsumup_tot is
BEGIN
subtotal := subtotal + amount;
salestax := states_tax*subtotal;
payment := salestax+subtotal;
return ;
END spsumup_tot ;
-- --------------------
-- Clear Level 3 Totals
-- --------------------
procedure spsumup_clr3 is
BEGIN
return ;
END spsumup_clr3 ;
-- --------------------
-- Clear Level 2 Totals
-- --------------------
procedure spsumup_clr2 is
BEGIN
return ;
END spsumup_clr2 ;
-- --------------------
-- Clear Level 1 Totals
-- --------------------
procedure spsumup_clr1 is
BEGIN
subtotal := 0;
return ;
END spsumup_clr1 ;
-- --------------------------
-- get first composite record
-- --------------------------
procedure spsumup_gfr is
BEGIN
-- ----- READING THE FIRST RECORD OF MASTER FILE ------
if orders_cursor%isopen = false then
OPEN orders_cursor ;
else
CLOSE orders_cursor ;
OPEN orders_cursor ;
end if;
loop
FETCH orders_cursor
INTO orders_row,orders_cust_no,orders_ddate
,orders_ordno,orders_shiptype,orders_terms
;
exit;
end loop;
spsumup_gfr0;
return ;
END spsumup_gfr ;
-- -------------------------
-- get next composite record
-- -------------------------
procedure spsumup_gnr is
BEGIN
spsumup_gnr1;
return ;
END spsumup_gnr ;
-- -----------------------------------
-- get first composite record, level 0
-- -----------------------------------
procedure spsumup_gfr0 is
BEGIN
gl_eof := false;
while TRUE loop
-- ----- CHECK EOF() OF MASTER -------
if orders_cursor%notfound then
gl_eof := TRUE;
return;
end if;
-- --------------------
-- EXACT LOOKUP IN SPCUST
-- ---------------------
if cust_cursor%isopen = false then
OPEN cust_cursor ;
else
CLOSE cust_cursor ;
OPEN cust_cursor ;
end if;
loop
FETCH cust_cursor
INTO cust_row,cust_address,cust_city
,cust_company,cust_custno,cust_firstname
,cust_lastname,cust_mrms,cust_region
,cust_state,cust_zip;
exit;
end loop;
if cust_cursor%notfound then
EXEC SQL CLOSE cust_cursor ;
-- ----- CASE : TERMINATE --------
return ; -- exit(0)
end if;
-- --------------------
-- EXACT LOOKUP IN SPUPORD
-- ---------------------
if upord_cursor%isopen = false then
OPEN upord_cursor ;
else
CLOSE upord_cursor ;
OPEN upord_cursor ;
end if;
loop
FETCH upord_cursor
INTO upord_row,upord_amnt,upord_cust_no
,upord_ddate,upord_saltax,upord_subtot
;
exit;
end loop;
if upord_cursor%notfound then
----- CASE : BLANK -------
upord_amnt := 0.00;
upord_cust_no := 0;
upord_ddate := NULL;
upord_saltax := 0.00;
upord_subtot := 0.00;
end if;
-- --------------------
-- EXACT LOOKUP IN SPSTATES
-- ---------------------
if states_cursor%isopen = false then
OPEN states_cursor ;
else
CLOSE states_cursor ;
OPEN states_cursor ;
end if;
loop
FETCH states_cursor
INTO states_row,states_abbrev,states_state
,states_tax;
exit;
end loop;
if states_cursor%notfound then
----- CASE : BLANK -------
states_abbrev := gc_space;
states_state := gc_space;
states_tax := 0.00;
end if;
spsumup_gfr1;
-- ----- CASE : SKIP -------
if gl_eof = true then
spsumup_gnr0;
end if;
exit ; -- end while loop
end loop;
return ;
END spsumup_gfr0 ;
-- -----------------------------------
-- get next composite record, level 0
-- -----------------------------------
procedure spsumup_gnr0 is
BEGIN
gl_eof := false ;
while TRUE loop
<<lbl1>>
-- ----- SKIP MASTER FOR NEXT RECORD -------
loop
FETCH orders_cursor
INTO orders_row,orders_cust_no,orders_ddate
,orders_ordno,orders_shiptype,orders_terms
;
exit;
end loop;
-- ----- CHECK EOF() OF MASTER -------
if orders_cursor%notfound then
gl_eof := TRUE;
return;
end if;
-- --------------------
-- EXACT LOOKUP IN SPCUST
-- ---------------------
if cust_cursor%isopen = false then
OPEN cust_cursor ;
else
CLOSE cust_cursor ;
OPEN cust_cursor ;
end if;
loop
FETCH cust_cursor
INTO cust_row,cust_address,cust_city
,cust_company,cust_custno,cust_firstname
,cust_lastname,cust_mrms,cust_region
,cust_state,cust_zip;
exit;
end loop;
if cust_cursor%notfound then
-- ----- CASE : TERMINATE --------
return ; -- exit(0)
end if;
-- --------------------
-- EXACT LOOKUP IN SPUPORD
-- ---------------------
if upord_cursor%isopen = false then
OPEN upord_cursor ;
else
CLOSE upord_cursor ;
OPEN upord_cursor ;
end if;
loop
FETCH upord_cursor
INTO upord_row,upord_amnt,upord_cust_no
,upord_ddate,upord_saltax,upord_subtot
;
exit;
end loop;
if upord_cursor%notfound then
----- CASE : BLANK -------
upord_amnt := 0.00;
upord_cust_no := 0;
upord_ddate := NULL;
upord_saltax := 0.00;
upord_subtot := 0.00;
end if;
-- --------------------
-- EXACT LOOKUP IN SPSTATES
-- ---------------------
if states_cursor%isopen = false then
OPEN states_cursor ;
else
CLOSE states_cursor ;
OPEN states_cursor ;
end if;
loop
FETCH states_cursor
INTO states_row,states_abbrev,states_state
,states_tax;
exit;
end loop;
if states_cursor%notfound then
----- CASE : BLANK -------
states_abbrev := gc_space;
states_state := gc_space;
states_tax := 0.00;
end if;
spsumup_gfr1;
-- ----- CASE : SKIP -------
if gl_eof = false then
exit;
else
goto lbl1;
end if;
exit ; -- end while loop
end loop ; -- while true
return ;
END spsumup_gnr0 ;
-- -----------------------------------
-- get first composite record, level 1
-- -----------------------------------
procedure spsumup_gfr1 is
BEGIN
gl_eof := false;
-- -----------
-- SCAN FOR SPITEMS
-- -----------
if items_cursor%isopen = false then
OPEN items_cursor ;
else
CLOSE items_cursor ;
OPEN items_cursor ;
end if;
loop
FETCH items_cursor
INTO items_row,items_orderno,items_productno
,items_quantity;
exit;
end loop;
while TRUE loop
-- ----- NOT FOUND() ------
if items_cursor%notfound then
-- ----- CASE : SKIP ------
gl_eof := true;
CLOSE items_cursor ;
return;
end if;
CLOSE items_cursor ;
-- --------------------
-- EXACT LOOKUP IN SPPRICES
-- ---------------------
if prices_cursor%isopen = false then
OPEN prices_cursor ;
else
CLOSE prices_cursor ;
OPEN prices_cursor ;
end if;
loop
FETCH prices_cursor
INTO prices_row,prices_descrptn,prices_price
,prices_prodcode;
exit;
end loop;
if prices_cursor%notfound then
----- CASE : BLANK -------
prices_descrptn := gc_space;
prices_price := 0.00;
prices_prodcode := 0;
end if;
exit;
end loop; -- while true
return ;
END spsumup_gfr1 ;
-- ----------------------------------
-- get next composite record, level 1
-- ----------------------------------
procedure spsumup_gnr1 is
BEGIN
gl_eof := false ;
while TRUE loop
<<lbl2>>
-- ----- SKIP SPITEMS FOR NEXT RECORD -----
if items_cursor%isopen = false then
OPEN items_cursor ;
else
CLOSE items_cursor ;
OPEN items_cursor ;
end if;
gn_crcnt := 0;
loop
FETCH items_cursor
INTO items_row,items_orderno,items_productno
,items_quantity;
if items_cursor%notfound then
gn_rcnt := 2 ;
exit ;
else
gn_crcnt := gn_crcnt + 1 ;
exit when gn_crcnt >= gn_rcnt;
end if;
end loop;
-- ----- NOT FOUND() ------
if items_cursor%notfound then
spsumup_gnr0;
return;
else
gn_rcnt := gn_rcnt + 1;
end if;
CLOSE items_cursor ;
-- --------------------
-- EXACT LOOKUP IN SPPRICES
-- ---------------------
if prices_cursor%isopen = false then
OPEN prices_cursor ;
else
CLOSE prices_cursor ;
OPEN prices_cursor ;
end if;
loop
FETCH prices_cursor
INTO prices_row,prices_descrptn,prices_price
,prices_prodcode;
exit;
end loop;
if prices_cursor%notfound then
----- CASE : BLANK -------
prices_descrptn := gc_space;
prices_price := 0.00;
prices_prodcode := 0;
end if;
exit;
end loop; -- while true
return ;
END spsumup_gnr1 ;
BEGIN
spsumup_clrc;
spsumup_gfr;
if gl_eof = true then
return ; -- exit(0)
end if;
spsumup_clr1;
spsumup_fld;
spsumup_hd1;
-- ------------MAIN PROGRAM
while TRUE loop
spsumup_body;
spsumup_gnr;
gl_fields := false;
if gl_eof = true then
gl_fields := true;
exit;
elsif pcust_company <> cust_company then
spsumup_ft1;
spsumup_hd1;
elsif porders_ddate <> orders_ddate then
spsumup_ft2;
spsumup_hd2;
elsif porders_ordno <> orders_ordno then
spsumup_ft3;
spsumup_hd3;
end if;
end loop ;
-- --------------- TERMINATION
spsumup_fld;
spsumup_ft1;
if orders_cursor%isopen = true then
CLOSE orders_cursor;
end if;
END ; -- end of main
/
[EDITED by LF: applied [spoiler] tags to shorten a message. Supertime2000, have a look here to learn how to use [code] tags which will preserve formatting. This time, I did that for you.]
[Updated on: Mon, 14 May 2012 01:10] by Moderator Report message to a moderator
|
|
|
Re: Pl/Sql, Pro*C Process Code Generator For Oracle [message #554407 is a reply to message #554377] |
Mon, 14 May 2012 04:15 |
cookiemonster
Messages: 13963 Registered: September 2008 Location: Rainy Manchester
|
Senior Member |
|
|
What on earth is this supposed to be doing:
procedure spsumup_ft3 is
BEGIN
if upord_cursor%isopen = false then
OPEN upord_cursor ;
else
CLOSE upord_cursor ;
OPEN upord_cursor ;
end if;
UPDATE spupord
SET spupord.saltax = salestax, spupord.subtot = subtotal
WHERE rowid = pupord_row ;
return ;
END spsumup_ft3 ;
You open a global cursor and do nothing with it, then do an unrelated update using global parameters.
The code just generally looks badly constructed.
|
|
|
Re: Pl/Sql, Pro*C Process Code Generator For Oracle [message #554412 is a reply to message #554407] |
Mon, 14 May 2012 04:50 |
supertime2000
Messages: 6 Registered: May 2012
|
Junior Member |
|
|
True. It should read:
procedure spsumup_ft3 is
BEGIN
if spupord_cursor%isopen = false then
OPEN spupord_cursor ;
else
CLOSE spupord_cursor ;
OPEN spupord_cursor ;
end if;
UPDATE spupord
SET spupord.saltax = salestax, spupord.subtot = subtotal
WHERE rowid = spupord_row ;
return ;
END spsumup_ft3 ;
We appreciate. Pardon the aberration. How about visiting SnapProc site and telling us how you like the 'concept' of generating all this code without actually programming? Thank u.
|
|
|
Re: Pl/Sql, Pro*C Process Code Generator For Oracle [message #554438 is a reply to message #554412] |
Mon, 14 May 2012 08:43 |
cookiemonster
Messages: 13963 Registered: September 2008 Location: Rainy Manchester
|
Senior Member |
|
|
supertime2000 wrote on Mon, 14 May 2012 10:50True. It should read:
procedure spsumup_ft3 is
BEGIN
if spupord_cursor%isopen = false then
OPEN spupord_cursor ;
else
CLOSE spupord_cursor ;
OPEN spupord_cursor ;
end if;
UPDATE spupord
SET spupord.saltax = salestax, spupord.subtot = subtotal
WHERE rowid = spupord_row ;
return ;
END spsumup_ft3 ;
We appreciate. Pardon the aberration. How about visiting SnapProc site and telling us how you like the 'concept' of generating all this code without actually programming? Thank u.
The only difference between that and what I quoted is the cursor name. It still makes no sense what so ever.
|
|
|
Re: Pl/Sql, Pro*C Process Code Generator For Oracle [message #554441 is a reply to message #554438] |
Mon, 14 May 2012 08:59 |
cookiemonster
Messages: 13963 Registered: September 2008 Location: Rainy Manchester
|
Senior Member |
|
|
And then there's this:
That's your idea of professional code? An infinite loop?
OK - I know there are exit statements, but seriously, why set up the risk of an infinite loop in the first place?
Your autogenerated code would not pass code review at any professional site.
|
|
|
Re: Pl/Sql, Pro*C Process Code Generator For Oracle [message #554496 is a reply to message #554441] |
Mon, 14 May 2012 22:42 |
supertime2000
Messages: 6 Registered: May 2012
|
Junior Member |
|
|
This code generation interface was written in the 90s on DOS and then in 2002, it was migrated to Windows. And now, the code generation is on the Net. It requires no presence of Oracle to work. And in fact, it has been developed without using Oracle directly. It's not about aberrations in code, it is about the idea, the concept. Look at the inteface, not just the code. Only some community support can put the code in order. And it all begins with words of encouragement for an innovative idea. Programming is not about doing difficult things, it is about simplifying them. The developer kept this unique idea alive for two decades in all adversity, changing platforms. But Oracle Corporation and the Community failed to take notice and move it forward. And sadly, as we can see, the scene still remains skeptical. Our question: Does Oracle or any third party, have anything for a common man to create multi table pl/sql, pro*c code? All the best!
|
|
|
Re: Pl/Sql, Pro*C Process Code Generator For Oracle [message #612346 is a reply to message #554340] |
Wed, 16 April 2014 06:36 |
supertime2000
Messages: 6 Registered: May 2012
|
Junior Member |
|
|
Yahoo! Try this Googley - 'Online, Multi Table, PL/SQL, Pro*C, Process, Source, Code, Generator, Oracle, Create, Programming, Free' - bingO!
|
|
|
Goto Forum:
Current Time: Sun Feb 02 16:17:33 CST 2025
|