📄 plgcgml.spb
字号:
/* Formatted by PL/Formatter v3.1.2.1 on 2001/04/22 18:29 */
CREATE OR REPLACE PACKAGE BODY PLGcgml
IS
/*----------------------------------------------------------------
|| PL/Generator from Quest Software
||----------------------------------------------------------------
|| File: PLGcgml.spb
|| Author: Steven Feuerstein
||
|| This is a part of the PL/Generator Code library.
|| Copyright (C) 1998-1999 Quest Software, Inc.
|| All rights reserved.
||
|| For more information, call Quest Software at 1-800-REVEAL4
|| or check out our Web page: www.Quest Software.com
||
||**************** Modification History **************************
|| Date By Description
|| -------- ------ -----------------------------------------------
|| 3/31/99 SEF Created from PLGgen
******************************************************************/
c_package PLGadmin.identifier := 'plgcgml';
g_based_on PLGadmin.identifier := PLGte.driver;
PROCEDURE pl (str IN VARCHAR2)
IS
BEGIN
IF LENGTH (str) > 80
THEN
DBMS_OUTPUT.put_line (SUBSTR (str, 1, 80));
pl (SUBSTR (str, 81));
ELSE
DBMS_OUTPUT.put_line (str);
END IF;
END;
---------------- Modify Driver Information
PROCEDURE set_based_on (drvr IN VARCHAR2)
IS
BEGIN
g_based_on := UPPER (drvr);
END;
FUNCTION based_on
RETURN VARCHAR2
IS
BEGIN
RETURN g_based_on;
END;
PROCEDURE clear (
drvr IN VARCHAR2 := NULL,
sch IN VARCHAR2 := NULL,
delarray IN BOOLEAN := FALSE
)
IS
v_drvr PLGadmin.identifier
:= NVL (UPPER (drvr), test_driver);
BEGIN
/* Clear out old driver information. */
PLGdoir.delfoundation (drvr);
/* Use cleaner approach
PLGdoir.del (
drv => v_drvr,
tab => '%',
otype => '%',
itype => '%',
seq => NULL,
sch => sch,
foundation_only => FALSE,
del_header => TRUE);
*/
/* And get rid of any old array definitions as well. */
IF delarray
THEN
PLGdoir.delarray (drv => v_drvr, arrayname => '%');
END IF;
END;
PROCEDURE defarray (
pkgname IN VARCHAR2,
arrayname IN VARCHAR2,
sch IN VARCHAR2 := NULL,
drvr IN VARCHAR2 := NULL
)
IS
v_drvr PLGadmin.identifier
:= NVL (UPPER (drvr), test_driver);
v_pkg PLGadmin.identifier := pkgname;
BEGIN
IF sch IS NOT NULL
THEN
v_pkg := sch || '.' || pkgname;
END IF;
PLGdoir.set_array (v_drvr, arrayname, v_pkg);
COMMIT;
END;
---------------- Generate Text from cgml
/* Called by genfile and genstring to consolidate logic. */
PROCEDURE runcgml (
obj IN VARCHAR2,
parms IN PLGadmin.vc2000_tabtype,
file IN VARCHAR2,
show IN BOOLEAN,
cleardriver IN BOOLEAN,
sch IN VARCHAR2,
srctyp IN INTEGER,
trgtyp IN INTEGER,
drvr_in IN VARCHAR2,
objrequired IN BOOLEAN := TRUE,
delarray IN BOOLEAN := TRUE,
single_pass IN BOOLEAN := FALSE
)
IS
v_drvr PLGadmin.identifier
:= NVL (UPPER (drvr_in), test_driver);
v_sch PLGadmin.identifier := NVL (sch, USER);
BEGIN
/* Force reload of driver every time. */
PLGgen.reset;
/* 4/2001 Make sure JUST LIKE driver is set */
PLGdoir.reset_just_like_drv;
IF show
THEN
PLGgen.display;
ELSE
PLGgen.nodisplay;
END IF;
IF cleardriver
THEN
clear (v_drvr, v_sch, delarray);
END IF;
/* Define the driver, based on Table Encapsulator. */
PLGdoir.defdrv (v_drvr,
PLGdoir.c_table_dbsrc,
NULL,
based_on
);
/* Read from and write to specified repositories. */
PLGdoir.setdrvsrctype (v_drvr,
PLGdoir.c_global,
srctyp,
v_sch
);
PLGdoir.setdrvtrgtype (v_drvr,
PLGdoir.c_global,
trgtyp,
v_sch
);
PLGdoir.defdrvsrc (v_drvr,
1,
file,
test_driver,
ftype => PLGdoir.c_ft_code,
use_file => TRUE,
tab => PLGdoir.c_global,
sch => PLGdoir.c_global
);
/* Generate the code. */
PLGgen.fortab (v_drvr,
obj,
parms,
sch => v_sch,
objrequired => objrequired,
single_pass => single_pass
);
PLGgen.nodisplay;
clear (v_drvr, v_sch);
END;
PROCEDURE runcgml (
obj IN VARCHAR2,
file IN VARCHAR2,
show IN BOOLEAN,
cleardriver IN BOOLEAN,
sch IN VARCHAR2,
srctyp IN INTEGER,
trgtyp IN INTEGER,
drvr_in IN VARCHAR2,
objrequired IN BOOLEAN := TRUE,
delarray IN BOOLEAN := TRUE,
single_pass IN BOOLEAN := FALSE
)
IS
parms PLGadmin.vc2000_tabtype;
BEGIN
runcgml (obj,
parms,
file,
show,
cleardriver,
sch,
srctyp,
trgtyp,
drvr_in,
objrequired,
delarray,
single_pass
);
END;
PROCEDURE loadstring (
string IN VARCHAR2,
delim IN VARCHAR2 := NULL,
drvr IN VARCHAR2 := NULL,
cleartable IN BOOLEAN := TRUE
)
IS
v_drvr PLGadmin.identifier
:= NVL (UPPER (drvr), test_driver);
mytab PLGadmin.vc2000_tabtype;
v_row PLS_INTEGER;
v_delim PLGadmin.identifier
:= NVL (delim, CHR (10));
BEGIN
IF string IS NOT NULL
THEN
/* Clear out table. */
IF cleartable
THEN
DELETE
FROM PLG_driver_source
WHERE driver = v_drvr;
v_row := 1;
ELSE
BEGIN
SELECT MAX (line) + 1
INTO v_row
FROM PLG_driver_source
WHERE driver = v_drvr;
EXCEPTION
WHEN OTHERS
THEN
v_row := 1;
END;
END IF;
/* Load string into database and then process. */
PLGprs.string (string,
mytab,
v_delim,
PLGprs.c_word
);
FOR indx IN mytab.FIRST .. mytab.LAST
LOOP
INSERT INTO PLG_driver_source
(line, driver, name, seq, text)
VALUES (
v_row,
v_drvr,
test_driver,
1,
mytab (indx)
);
v_row := v_row + 1;
END LOOP;
COMMIT;
END IF;
END;
PROCEDURE genfile (
obj IN VARCHAR2,
file IN VARCHAR2,
show IN BOOLEAN := FALSE,
cleardriver IN BOOLEAN := TRUE,
sch IN VARCHAR2 := NULL,
drvr IN VARCHAR2 := NULL,
delarray IN BOOLEAN := TRUE,
single_pass IN BOOLEAN := FALSE
)
IS
BEGIN
runcgml (obj,
file,
show,
cleardriver,
sch,
PLGdoir.c_file,
PLGdoir.c_file,
drvr,
delarray => delarray,
single_pass => single_pass
);
END;
PROCEDURE genfile (
obj IN VARCHAR2,
parms IN PLGadmin.vc2000_tabtype,
file IN VARCHAR2,
show IN BOOLEAN := FALSE,
cleardriver IN BOOLEAN := TRUE,
sch IN VARCHAR2 := NULL,
drvr IN VARCHAR2 := NULL,
delarray IN BOOLEAN := TRUE,
single_pass IN BOOLEAN := FALSE
)
IS -- 4/2001 - Switch to v_drvr from drvr.
v_drvr PLGadmin.identifier
:= NVL (UPPER (drvr), test_driver);
BEGIN
runcgml (obj,
parms,
file,
show,
cleardriver,
sch,
PLGdoir.c_file,
PLGdoir.c_file,
v_drvr, /* drvr, */
delarray => delarray,
single_pass => single_pass
);
END;
PROCEDURE genfile (
file IN VARCHAR2,
show IN BOOLEAN := FALSE,
cleardriver IN BOOLEAN := TRUE,
sch IN VARCHAR2 := NULL,
drvr IN VARCHAR2 := NULL,
delarray IN BOOLEAN := TRUE,
single_pass IN BOOLEAN := FALSE
)
IS -- 4/2001 - Switch to v_drvr from drvr.
v_drvr PLGadmin.identifier
:= NVL (UPPER (drvr), test_driver);
BEGIN
-- 4/2001 - Make sure that JUST LIKE driver is recognized.
-- ALWAYS reload the driver.
PLGgen.reset;
runcgml (NULL,
file,
show,
cleardriver,
sch,
PLGdoir.c_file,
PLGdoir.c_file,
v_drvr, /* drvr, */
objrequired => FALSE,
delarray => delarray,
single_pass => single_pass
);
END;
PROCEDURE genstring (
obj IN VARCHAR2,
string IN VARCHAR2,
show IN BOOLEAN := FALSE,
cleardriver IN BOOLEAN := TRUE,
sch IN VARCHAR2 := NULL,
delim IN VARCHAR2 := NULL,
drvr IN VARCHAR2 := NULL,
delarray IN BOOLEAN := TRUE,
single_pass IN BOOLEAN := FALSE
)
IS
v_drvr PLGadmin.identifier
:= NVL (UPPER (drvr), test_driver);
mytab PLGadmin.vc2000_tabtype;
v_row PLS_INTEGER := 1;
v_delim PLGadmin.identifier
:= NVL (delim, CHR (10));
BEGIN
loadstring (string, delim, v_drvr);
runcgml (obj,
'ALREADY LOADED',
show,
cleardriver,
sch,
PLGdoir.c_dbtab,
PLGdoir.c_list,
v_drvr,
delarray => delarray,
single_pass => single_pass
);
END;
PROCEDURE genstring (
string IN VARCHAR2,
show IN BOOLEAN := FALSE,
cleardriver IN BOOLEAN := TRUE,
sch IN VARCHAR2 := NULL,
delim IN VARCHAR2 := NULL,
drvr IN VARCHAR2 := NULL,
delarray IN BOOLEAN := TRUE,
single_pass IN BOOLEAN := FALSE
)
IS
v_drvr PLGadmin.identifier
:= NVL (UPPER (drvr), test_driver);
mytab PLGadmin.vc2000_tabtype;
v_row PLS_INTEGER := 1;
v_delim PLGadmin.identifier
:= NVL (delim, CHR (10));
BEGIN
loadstring (string, delim, v_drvr);
runcgml (NULL,
'ALREADY LOADED',
show,
cleardriver,
sch,
PLGdoir.c_dbtab,
PLGdoir.c_list,
v_drvr,
objrequired => FALSE,
delarray => delarray,
single_pass => single_pass
);
END;
PROCEDURE genstring (
obj IN VARCHAR2,
string1_inout IN OUT VARCHAR2,
string2_inout IN OUT VARCHAR2,
string3_inout IN OUT VARCHAR2,
string4_inout IN OUT VARCHAR2,
string5_inout IN OUT VARCHAR2,
show IN BOOLEAN := FALSE,
sch IN VARCHAR2 := NULL,
delim IN VARCHAR2 := NULL,
drvr IN VARCHAR2 := NULL,
delarray IN BOOLEAN := TRUE,
single_pass IN BOOLEAN := FALSE,
objrequired IN BOOLEAN := TRUE,
maxlen IN PLS_INTEGER := NULL
)
/*
Designed for GenX, or a GUI front end...it populates a list
and passes that through, does not use the database, does not
create a separate driver.
*/
IS
v_drvr PLGadmin.identifier
:= NVL (UPPER (drvr), PLGte.driver);
mytab PLGadmin.vc2000_tabtype;
v_row PLS_INTEGER := 1;
v_delim PLGadmin.identifier
:= NVL (delim, CHR (10));
onstring PLS_INTEGER := 1;
l_next VARCHAR2 (32767);
l_string VARCHAR2 (32767);
PROCEDURE loadstring (str IN VARCHAR2)
IS
BEGIN
IF str IS NOT NULL
THEN
PLGprs.string1 (str, mytab, v_delim);
END IF;
END;
BEGIN
loadstring (string1_inout);
loadstring (string2_inout);
loadstring (string3_inout);
loadstring (string4_inout);
loadstring (string5_inout);
IF show
THEN
PLGgen.display;
ELSE
PLGgen.nodisplay;
END IF;
/* Generate the code. */
PLGgen.fromlist (v_drvr,
obj,
list => mytab,
sch => sch,
objrequired => objrequired,
single_pass => single_pass
);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -