📄 plgplsql.spb
字号:
'PLGplsql.convtype([objname],' ||
'PLGdesc.g_datatype_names(PLGgen.argsep([\currrow]).datatype))');
PLGdoir.setdynvarchar2 (driver, 'ORIG_DATATYPE_NAME',
'PLGdesc.g_datatype_names(PLGgen.argsep([\currrow]).datatype)');
PLGdoir.setdynvarchar2 (driver, 'COMPOSITE_TYPE',
'PLGplsql.composite(' ||
' [objname],' ||
' [progsep.progname],' ||
' PLGgen.arg([\currrow]).overload,' ||
' PLGgen.arg([\currrow]).argument_name,' ||
' [schema])');
PLGdoir.setdynboolean (driver, 'IS_RECORD',
'PLGgen.[\arrayname]([\currrow]).datatype = PLGdesc.c_record');
PLGdoir.setdynboolean (driver, 'IS_INDEXBY_TABLE',
'PLGgen.[\arrayname]([\currrow]).datatype = PLGdesc.c_indexby_table');
PLGdoir.setdynboolean (driver, 'IS_REF_CURSOR',
'PLGgen.[\arrayname]([\currrow]).datatype = PLGdesc.c_ref_cursor');
PLGdoir.setdynboolean (driver, 'IS_OBJECT',
'PLGgen.[\arrayname]([\currrow]).datatype = PLGdesc.c_rec_object_typecord');
PLGdoir.setdynboolean (driver, 'IS_NESTED_TABLE',
'PLGgen.[\arrayname]([\currrow]).datatype = PLGdesc.c_nested_table');
PLGdoir.setdynboolean (driver, 'IS_VARRAY',
'PLGgen.[\arrayname]([\currrow]).datatype = PLGdesc.c_varray');
PLGdoir.setdynvarchar2 (driver, 'ITEMDELIM',
'PLGplsql.ibtab_itemdelim(' ||
' [objname],' ||
' [progsep.progname],' ||
' PLGgen.arg([\currrow]).overload,' ||
' PLGgen.arg([\currrow]).argument_name,' ||
' [schema])');
PLGdoir.setdynvarchar2 (driver, 'SEGDELIM',
'PLGplsql.ibtab_segdelim(' ||
' [objname],' ||
' [progsep.progname],' ||
' PLGgen.arg([\currrow]).overload,' ||
' PLGgen.arg([\currrow]).argument_name,' ||
' [schema])');
END;
PROCEDURE setlookups
IS
BEGIN
/* IS NULL error checking - Can override for your table or schema. */
PLGdoir.setlookup (
driver,
PLGdoir.c_global,
PLGdoir.c_raise,
PLGdoir.c_global,
'ISNULL',
-20000,
'Value of [colname] cannot be NULL.',
PLGdoir.c_global
);
END;
PROCEDURE setaliases
/* The pre-set aliases */
IS
BEGIN
/* File extensions */
PLGdoir.set_global_alias (driver, 'pkgbodyext', 'pkb',
'Package body file extension');
/* Target Names */
PLGdoir.set_global_alias (driver, 'saprogs', '{saprefix}[objname].{saext}',
'Stand-alone programs file');
PLGdoir.set_ident (driver, 'divider', '_', 'Identifier name divider');
/* Shorthand */
PLGdoir.set_global_alias (driver, 'pkycoltype', '[objname].{[pkycolname]}%TYPE',
'Primary key %TYPE declaration');
/* Test Elements */
PLGdoir.set_global_alias (driver, 'displaymech', 'DBMS_OUTPUT.PUT_LINE',
'Display mechanism');
PLGdoir.set_global_alias (driver, 'maxtestrows', '5',
'Row count limit in test scripts');
END;
PROCEDURE initialize
IS
BEGIN
/* Set flag to make sure all inserts are "foundations" for the driver. */
PLGdoir.drvfoundation;
/* Clean out all global entries related to this driver */
PLGdoir.delfoundation (driver);
/* Use cleaner approach
PLGdoir.del (
drv => driver,
tab => '%',
otype => '%',
itype => '%',
seq => NULL,
sch => PLGdoir.c_global);
*/
PLGdoir.defdrv (driver, PLGdoir.c_plsql_dbsrc, 'PL/SQL Code Encapsulator');
setfiles;
setidentifiers;
setaliases;
setsrc;
setlookups;
/* Default exception handling: PL/SQL */
PLGdoir.setpsexc (
drv => driver,
tab => PLGdoir.c_global,
sch => PLGdoir.c_global);
/* Do NOT use PLVxmn for tracing */
PLGdoir.nousexmn (
drv => driver,
tab => PLGdoir.c_global,
sch => PLGdoir.c_global);
/* Do NOT use cursor variables by default */
PLGdoir.nosetcurvar (
drv => driver,
tab => PLGdoir.c_global,
sch => PLGdoir.c_global);
/* Do NOT create stand-alone programs by default */
PLGdoir.nosetsaprogs (
drv => driver,
tab => PLGdoir.c_global,
sch => PLGdoir.c_global);
/* Do NOT create row count functions by default */
PLGdoir.setcountrows (
drv => driver,
tab => PLGdoir.c_global,
sch => PLGdoir.c_global);
/* Make sure that incremental loading is disabled globally. */
PLGdoir.setloadnone (
drv => driver,
tab => PLGdoir.c_global,
sch => PLGdoir.c_global);
/* Minimum set of cursors. */
PLGdoir.setcurinfo (
driver,
PLGdoir.c_global,
'all',
'*',
PLGdoir.c_global
);
PLGdoir.nodrvfoundation;
END;
PROCEDURE analyze_code (
progname IN VARCHAR2,
prog_out IN OUT PLGdesc.prog_tt,
arglist_out IN OUT PLGdesc.arglist_tt,
retarglist_out IN OUT PLGdesc.arglist_tt,
sch IN VARCHAR2 := NULL
)
IS
/* Variables to hold components of the name for NAME_RESOLVE. */
v_sch PLGadmin.identifier;
part1 PLGadmin.identifier;
part2 PLGadmin.identifier;
dblink PLGadmin.identifier;
part1_type NUMBER;
object_number NUMBER;
procedure_type CONSTANT INTEGER := 7;
function_type CONSTANT INTEGER := 8;
package_type CONSTANT INTEGER := 9;
v_prog PLGadmin.identifier :=
PLGadmin.ifelse (sch IS NULL, progname, sch || '.' || progname);
BEGIN
prog_out.DELETE;
arglist_out.DELETE;
retarglist_out.DELETE;
--progsep_out.DELETE;
--argseplist_out.DELETE;
DBMS_UTILITY.NAME_RESOLVE (
v_prog,
1,
v_sch,
part1,
part2,
dblink,
part1_type,
object_number
);
/* Retrieve all program and argument information. */
PLGdesc.get_prog_info (
v_sch, part1, part2, prog_out, arglist_out, retarglist_out);
/* OLD APPROACH
-- Obtain top-level info about all programs
PLGdesc.progs (v_sch, part1, part2, prog_out);
-- Extract argument information for each program identified.
PLGdesc.obtain_args (
v_sch, part1, part2, prog_out, arglist_out);
-- Separate out information for overloaded programs.
*/
/*PLGdesc.separate_progs_and_args (
prog_out,
arglist_out,
progsep_out,
argseplist_out
);
-- Now filter out composite data structures from the separated arg list.
-- Also move function return information to separate area in this step.
PLGdesc.filter_arguments (
prog_out,
arglist_out,
progsep_out,
argseplist_out
);
*/
END analyze_code;
PROCEDURE use_composites
(prog IN VARCHAR2,
sch IN VARCHAR2 := NULL)
IS
BEGIN
PLGdoir.setactive (driver, prog, 'use_composites', sch);
END;
PROCEDURE nouse_composites
(prog IN VARCHAR2,
sch IN VARCHAR2 := NULL)
IS
BEGIN
PLGdoir.setinactive (driver, prog, 'use_composites', sch);
END;
FUNCTION using_composites
(prog IN VARCHAR2,
sch IN VARCHAR2 := NULL)
RETURN BOOLEAN
IS
BEGIN
RETURN PLGdoir.isactive (driver, prog, 'use_composites', sch => sch);
END;
PROCEDURE set_composite
(prog IN VARCHAR2,
argname IN VARCHAR2,
compname IN VARCHAR2,
sch IN VARCHAR2 := NULL)
IS
BEGIN
PLGdoir.ins (driver,
sch, prog, PLGdoir.c_table, argname,
PLGdoir.c_column, c_composite,
0, /* No overloading */
compname);
END;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -