1 PACKAGE dbms_plugts IS
2
3 TS_EXP_BEGIN CONSTANT binary_integer := 1;
4 TS_EXP_END CONSTANT binary_integer := 2;
5
6 --
7 -- Tables to hold list of users and tablespaces.
8 --
9 v_tts_usr$ tts_info_tab := tts_info_tab();
10 v_tts_tbs$ tts_info_tab := tts_info_tab();
11
12 /**********************************************
13 ** Routines called directly by EXPORT **
14 **********************************************/
15
16 --++
17 -- Definition: This procedure constructs the beginImport call in an
18 -- anonymous PL/SQL block.
19 --
20 -- Inputs: None
21 --
22 -- Outputs: None
23 --++
24 PROCEDURE beginExport;
25
26 --++
27 -- Definition: This procedure verifies tablespaces are read-only during
28 -- export. It is called for each tablespace specified
29 --
30 -- Inputs: tsname = tablespace name to verify
31 --
32 -- Outputs: None
33 --
34 -- Possible Exceptions:
35 -- ts_not_found
36 -- ts_not_read_only
37 --++
38 PROCEDURE beginExpTablespace (
39 tsname IN varchar2);
40
41 --++
42 -- Definition: This procedure verifies objects are self-contained in the
43 -- tablespaces specified.
44 --
45 -- Inputs: incl_constraints = 1 if include constraints, 0 otherwise
46 -- incl_triggers = 1 if include triggers, 0 otherwise
47 -- incl_grants = 1 if include grants, 0 otherwise
48 -- full_closure = TRUE if both IN and OUT pointers are
49 -- considered violations
50 -- (should be TRUE for TSPITR)
51 -- do_check = 1 if check should be done, 0 if not done
52 -- job_type = DATABASE_EXPORT IF FULL TTS
53 -- encryption_password = true if encryption password supplied
54 -- on command line.
55 --
56 -- Outputs: None
57 --
58 -- Possible Exceptions:
59 -- ORA-29341 (not_self_contained)
60 --++
61 PROCEDURE checkPluggable (
62 incl_constraints IN number,
63 incl_triggers IN number,
64 incl_grants IN number,
65 full_check IN number,
66 do_check IN number DEFAULT 1,
67 job_type IN varchar2 DEFAULT NULL,
68 encryption_password IN BOOLEAN DEFAULT FALSE);
69
70 --++
71 -- Definition: This function returns the next line of a block that has been
72 -- previously selected for retrieval via selectBlock.
73 --
74 -- Inputs: None
75 --
76 -- Outputs: None
77 --
78 -- Returns: A string to be appended to the export file.
79 --++
80 FUNCTION getLine
81 RETURN varchar2;
82
83 --++
84 -- Definition: This procedures selects a particular PL/SQL anonymous block
85 -- for retrieval.
86 --
87 -- Inputs: blockID = the ID to pick a PL/SQL anonymous block
88 -- dbms_plugts.TS_EXP_BEGIN at the beginning of export
89 -- dbms_plugts.TS_EXP_END at the end of export
90 -- Outputs: None
91 --++
92 PROCEDURE selectBlock (
93 blockID IN binary_integer);
94
95 /**********************************************
96 ** Routines called directly by IMPORT **
97 **********************************************/
98
99 --++
100 -- Definition: The procedure informs the dbms_Plugts package about the
101 -- location of the new datafiles. If the file can not be found,
102 -- an error will be signaled, possible at a later point.
103 --
104 -- Inputs: filename = file name (including path)
105 --
106 -- Outputs: None
107 --++
108 PROCEDURE newDatafile (
109 filename IN varchar2);
110
111 --++
112 -- PROCEDURE DPMODE
113 --
114 -- Description: Tell the plugts code which mode Data Pump is running in.
115 --
116 -- Notes: - Called directly by import.
117 --
118 -- Inputs: job_mode - (full, schema, table, etc.)
119 --
120 -- Outputs None
121 --++
122 PROCEDURE DPMODE(
123 job_mode IN varchar2);
124
125 --++
126 -- Definition: This procedure informs the dbms_plugts package about
127 -- tablespace name to be included in the job.
128 --
129 -- Inputs: tsname - Tablespace name
130 --
131 -- Outputs: None
132 --++
133 PROCEDURE newTablespace (
134 tsname IN varchar2);
135
136 --++
137 -- Definition: This procedure adds a user to the import job.
138 --
139 -- Inputs: usrname - user name
140 --
141 -- Outputs: None
142 --++
143 PROCEDURE pluggableUser (
144 usrname IN varchar2);
145
146 --++
147 -- Definition: This procedure informs the plugts package about remap_user
148 -- information.
149 --
150 -- Inputs: from_user - a user in FROM_USER list
151 -- to_user - the corresponding user in TO_USER list
152 --
153 -- Outputs: None
154 --++
155 PROCEDURE mapUser (
156 from_user IN varchar2,
157 to_user IN varchar2);
158
159 --++
160 -- Definition: This procedure informs the plugts package about
161 -- REMAP_TABLESPACE information.
162 --
163 -- Inputs: from_ts - a tablespace name to be remapped
164 -- to_ts - the new corresponding tablespace to be created
165 --
166 -- Outputs: None
167 --++
168 PROCEDURE mapTs (
169 from_ts IN varchar2,
170 to_ts IN varchar2);
171
172 /*******************************************************************
173 ** Routines called automatically via the PL/SQL anonymous block **
174 *******************************************************************/
175 --++
176 -- Definition: This procedure informs the plugts package about the target
177 -- tablespaces and it's owner. It checks to make sure the
178 -- tablespace name does not conflict with any existing
179 -- tablespaces already in the database. It verifies the block
180 -- size is the same as that in the target database. If all this
181 -- succeeds, it begins importing metadata for the tablespace.
182 -- This procedure call appears in the export file.
183 --
184 -- The parameter list includes all columns for ts$, except those
185 -- that will be discarded (online$, undofile#, undoblock#,
186 -- ownerinstance, backupowner). The spares are included so that
187 -- the interface does not have to be changed even when these
188 -- spares are used in the future.
189 --
190 -- Three extra parameters are added for transporting migrated
191 -- tablespaces. seg_fno, seg_bno and seg_blks represent the
192 -- dictionary information held in SEG$ for any tablespace which
193 -- was migrated from dictionary managed to locally managed. The
194 -- file# and block# give the location of bitmap space header for
195 -- the migrated tablespace and the blocks parameter represents
196 -- the size of the space header in blocks.
197 --
198 -- Inputs: tsname - tablespace name
199 -- tsID - tablespace ID in original database
200 -- owner - owner of tablespace
201 -- n_files - number of datafiles in the tablespace
202 -- contents - contents column of ts$ (TEMP/PERMANENT)
203 -- blkSize - size of block in bytes
204 -- inc_num - incarnation number of extent
205 -- clean_SCN - tablespace clean SCN,
206 -- dflminext - default minimum number of extents
207 -- dflmaxext - default maximum number of extents
208 -- dflinit - default initial extent size
209 -- dflincr - default initial extent size
210 -- dflminlen - default minimum extent size
211 -- dflextpct - default percent extent size increase
212 -- dflogging - default logging attribute
213 -- affstrength - Affinity strength
214 -- bitmapped - If bitmapped
215 -- dbID - database ID
216 -- directallowed - allowed
217 -- flags - flags
218 -- creation_SCN - tablespace creation SCN
219 -- groupname - Group name
220 -- spare1 - spare1 in ts$
221 -- spare2 - spare2 in ts$
222 -- spare3 - spare3 in ts$
223 -- spare4 - spare4 in ts$
224 -- seg_fno - file# for space_hdr in seg$
225 -- seg_bno - block# for space_hdr in seg$
226 -- seg_blks - blocks, size of space_hdr in seg$
227 --
228 -- Outputs: None
229 --++
230 PROCEDURE beginImpTablespace (
231 tsname IN varchar2,
232 tsID IN number,
233 owner IN varchar2,
234 n_files IN binary_integer,
235 contents IN binary_integer,
236 blkSize IN binary_integer,
237 inc_num IN binary_integer,
238 clean_SCN IN number,
239 dflminext IN number,
240 dflmaxext IN number,
241 dflinit IN number,
242 dflincr IN number,
243 dflminlen IN number,
244 dflextpct IN binary_integer,
245 dflogging IN binary_integer,
246 affstrength IN number,
247 bitmapped IN number,
248 dbID IN number,
249 directallowed IN number,
250 flags IN number,
251 creation_SCN IN number,
252 groupname IN varchar2,
253 spare1 IN number,
254 spare2 IN number,
255 spare3 IN varchar2,
256 spare4 IN date,
257 seg_fno IN number DEFAULT 0,
258 seg_bno IN number DEFAULT 0,
259 seg_blks IN number DEFAULT 0);
260
261 --++
262 -- Definition: This procedure checks to see that the user name in the
263 -- pluggable set matches that entered by the DBA via the import
264 -- USERS command line option. Make sure that, after the user
265 -- mappings, the required user is already in the database. This
266 -- procedure call appears in the export file.
267 --
268 -- Inputs: username - user name
269 --
270 -- Outputs: None
271 --++
272 PROCEDURE checkUser (
273 username IN varchar2);
274
275 --++
276 -- Definition: This procedure passes the information about the pluggable set
277 -- to the PL/SQL package. Among them is the release version of
278 -- the Oracle executable that created the pluggable set, which
279 -- is used for checking compatibility. This procedure call
280 -- appears in the export file.
281 --
282 -- Inputs: clone_oracle_version - release version of Oracle executable
283 -- that created the pluggable set
284 -- charsetID - character set ID
285 -- ncharsetID - nchar set ID, in varchar2 format
286 -- (May be NULL if generated by 8.1.5)
287 -- platformID - platform ID
288 -- platformName - platform name
289 -- highest_data_objnum - highest data object # in pluggable set
290 -- highest_lob_sequence - highest LOB seq # in pluggable set
291 -- n_ts - number of tablespace to be plugged in
292 -- has_clobs - if tablespaces have CLOB data
293 -- has_nchars - if tablespaces have nchar data
294 -- char_smeantics_on - if tablespaces have char semantic data
295 --
296 -- Outputs: None
297 --++
298 PROCEDURE beginImport (
299 clone_oracle_version IN varchar2,
300 charsetID IN binary_integer,
301 ncharsetID IN varchar2,
302 srcplatformID IN binary_integer,
303 srcplatformName IN varchar2,
304 highest_data_objnum IN number,
305 highest_lob_sequence IN number,
306 n_ts IN number,
307 has_clobs IN number DEFAULT 1,
308 has_nchars IN number DEFAULT 1,
309 char_semantics_on IN number DEFAULT 1);
310
311 --++
312 -- Definition: This procedure checks and adjusts the version for each
313 -- compatibility type. This procedure is in the export file.
314 --
315 -- Inputs: compID - compatibility type name
316 -- compRL - release level
317 --
318 -- Outputs: None
319 --++
320 PROCEDURE checkCompType (
321 compID IN varchar2,
322 compRL IN varchar2);
323
324 --++
325 -- Definition: This procedure calls statically linked C routines to
326 -- associate the datafile with the tablespace and validates file
327 -- headers. This procedure appears in the export file.
328 --
329 -- The parameter list includes all columns in file$, except
330 -- those that will be discarded (status$, ownerinstance).
331 --
332 -- Inputs: name - file name (excluding path)
333 -- databaseID - database ID
334 -- absolute_fno - absolute file number
335 -- curFileBlks - size of file in blocks
336 -- tablespace_ID - tablespace ID in original database
337 -- relative_fno - relative file number
338 -- maxextend - maximum file size
339 -- inc - increment amount
340 -- creation_SCN - file creation SCN
341 -- checkpoint_SCN - file checkpoint SCN
342 -- reset_SCN - file reset SCN
343 -- spare1 - spare1 in file$
344 -- spare2 - spare2 in file$
345 -- spare3 - spare3 in file$
346 -- spare4 - spare4 in file$
347 --
348 -- Outputs: None
349 --++
350 PROCEDURE checkDatafile (
354 curFileBlks IN number,
351 name IN varchar2,
352 databaseID IN number,
353 absolute_fno IN binary_integer,
355 tablespace_ID IN number,
356 relative_fno IN binary_integer,
357 maxextend IN number,
358 inc IN number,
359 creation_SCN IN number,
360 checkpoint_SCN IN number,
361 reset_SCN IN number,
362 spare1 IN number,
363 spare2 IN number,
364 spare3 IN varchar2,
365 spare4 IN date);
366
367 --++
368 -- Definition: This procedure wraps up the tablespace check. This procedure
369 -- call appears in the export file.
370 --
371 -- Inputs: None
372 --
373 -- Outputs: None
374 --++
375 PROCEDURE endImpTablespace;
376
377 --++
378 -- Definition: This procedure calls a statically linked C routine to
379 -- atomically plug-in the pluggable set. This procedure call
380 -- appears in the export file.
381 --
382 -- Inputs: None
383 --
384 -- Outputs: None
385 --++
386 PROCEDURE commitPluggable;
387
388 --++
389 -- Definition: This procedure reclaims a segment by calling the statically
390 -- linked C routine kcp_plg_reclaim_segment. This procedure
391 -- call appears in the export file.
392 --
393 -- Inputs: The parameters match seg$ columns exactly. See seg$
394 -- description.
395 --
396 -- Outputs: NOne
397 --++
398 PROCEDURE reclaimTempSegment(
399 file_no IN BINARY_INTEGER,
400 block_no IN BINARY_INTEGER,
401 type_no IN BINARY_INTEGER,
402 ts_no IN BINARY_INTEGER,
403 blocks IN BINARY_INTEGER,
404 extents IN BINARY_INTEGER,
405 iniexts IN BINARY_INTEGER,
406 minexts IN BINARY_INTEGER,
407 maxexts IN BINARY_INTEGER,
408 extsize IN BINARY_INTEGER,
409 extpct IN BINARY_INTEGER,
410 user_no IN BINARY_INTEGER,
411 lists IN BINARY_INTEGER,
412 groups IN BINARY_INTEGER,
413 bitmapranges IN NUMBER,
414 cachehint IN BINARY_INTEGER,
415 scanhint IN BINARY_INTEGER,
416 hwmincr IN NUMBER,
417 spare1 IN NUMBER,
418 spare2 IN BINARY_INTEGER);
419
420 --++
421 -- Definition: This procedure does any final cleanup to end the import job.
422 --
423 -- Inputs: None
424 --
425 -- Outputs: None
426 --++
427 PROCEDURE endImport;
428
429 --++
430 -- Definition: This procedure gets the db char set properties of the
431 -- tablespaces in sys.tts_tbs$
432 --
433 -- Inputs: None
434 --
435 -- Outputs: has_clobs - tablespaces have clobs columns
436 -- has_nchars - tablespaces have nchars columns
437 -- char_semantics - has character semantics columns
438 --++
439 PROCEDURE get_db_char_properties (
440 has_clobs OUT binary_integer,
441 has_nchars OUT binary_integer,
442 char_semantics OUT binary_integer);
443
444 --++
445 -- Definition: This function queries the pl/sql table and pipelines it to
446 -- look like a sql table.
447 --
448 -- Inputs: ind - 1 indicates the tablespace table
449 -- - 2 indicates the user table
450 --
451 -- Outputs: None
452 --++
453 FUNCTION tab_func(ind NUMBER) RETURN sys.tts_info_tab pipelined;
454
455 /*******************************************************************
456 ** Possible Exceptions **
457 *******************************************************************/
458 ts_not_found EXCEPTION;
459 PRAGMA exception_init (ts_not_found, -29304);
460 ts_not_found_num NUMBER := -29304;
461
462 ts_not_read_only EXCEPTION;
463 PRAGMA exception_init (ts_not_read_only, -29335);
464 ts_not_read_only_num NUMBER := -29335;
465
466 internal_error EXCEPTION;
467 PRAGMA exception_init (internal_error, -29336);
468 internal_error_num NUMBER := -29336;
469
470 datafile_not_ready EXCEPTION;
471 PRAGMA exception_init (datafile_not_ready, -29338);
472 datafile_not_ready_num NUMBER := -29338;
473
474 blocksize_mismatch EXCEPTION;
475 PRAGMA exception_init (blocksize_mismatch, -29339);
476 blocksize_mismatch_num NUMBER := -29339;
477
478 exportfile_corrupted EXCEPTION;
479 PRAGMA exception_init (exportfile_corrupted, -29340);
480 exportfile_corrupted_num NUMBER := -29340;
481
482 not_self_contained EXCEPTION;
483 PRAGMA exception_init (not_self_contained, -29341);
484 not_self_contained_num NUMBER := -29341;
485
486 user_not_found EXCEPTION;
487 PRAGMA exception_init (user_not_found, -29342);
488 user_not_found_num NUMBER := -29342;
489
490 mapped_user_not_found EXCEPTION;
494 user_not_in_list EXCEPTION;
491 PRAGMA exception_init (mapped_user_not_found, -29343);
492 mapped_user_not_found_num NUMBER := -29343;
493
495 PRAGMA exception_init (user_not_in_list, -29344);
496 user_not_in_list_num NUMBER := -29344;
497
498 different_char_set EXCEPTION;
499 PRAGMA exception_init (different_char_set, -29345);
500 different_char_set_num NUMBER := -29345;
501
502 invalid_ts_list EXCEPTION;
503 PRAGMA exception_init (invalid_ts_list, -29346);
504 invalid_ts_list_num NUMBER := -29346;
505
506 ts_not_in_list EXCEPTION;
507 PRAGMA exception_init (ts_not_in_list, -29347);
508 ts_not_in_list_num NUMBER := -29347;
509
510 datafiles_missing EXCEPTION;
511 PRAGMA exception_init (datafiles_missing, -29348);
512 datafiles_missing_num NUMBER := -29348;
513
514 ts_name_conflict EXCEPTION;
515 PRAGMA exception_init (ts_name_conflict, -29349);
516 ts_name_conflict_num NUMBER := -29349;
517
518 sys_or_tmp_ts EXCEPTION;
519 PRAGMA exception_init (sys_or_tmp_ts, -29351);
520 sys_or_tmp_ts_num NUMBER := -29351;
521
522 ts_list_overflow EXCEPTION;
523 PRAGMA exception_init (ts_list_overflow, -29353);
524 ts_list_overflow_num NUMBER := -29353;
525
526 ts_failure_list EXCEPTION;
527 PRAGMA exception_init (ts_failure_list, -39185);
528 ts_failure_list_num NUMBER := -39185;
529
530 ts_list_empty EXCEPTION;
531 PRAGMA exception_init (ts_list_empty, -39186);
532 ts_list_empty_num NUMBER := -39186;
533
534 not_self_contained_list EXCEPTION;
535 PRAGMA exception_init (not_self_contained_list, -39187);
536 not_self_contained_list_num NUMBER := -39187;
537
538 /******************************************************************
539 ** Interface for testing, etc. **
540 ******************************************************************/
541 PROCEDURE init;
542
543 --++
544 -- Description: Initialize global variables used for debugging trace
545 -- messages
546 --
547 -- Inputs: debug_flags: Trace/debug flags from /TRACE param or
548 -- trace/debug event, possibly including global
549 -- trace/debug flags
550 --
551 -- Outputs: None
552 --++
553 PROCEDURE SetDebug (
554 debug_flags IN BINARY_INTEGER);
555 --++
556 -- Description: This procedure will send a message to the trace file using
557 -- KUPF$FILE.TRACE.
558 --
559 -- Inputs:
560 -- msg - message to print
561 --
562 -- Outputs:
563 -- None
564 --+
565 PROCEDURE SendTraceMsg (
566 msg IN VARCHAR2);
567
568 /*******************************************************************
569 ** Interface for trusted callouts **
570 *******************************************************************/
571 -- begin export
572 PROCEDURE kcp_bexp(
573 vsn OUT varchar2, -- Oracle server version
574 dobj_half OUT binary_integer, -- half of data obj#
575 dobj_odd OUT binary_integer); -- lowest bit of data obj#
576
577 -- get char, nchar ID and name
578 PROCEDURE kcp_getchar(
579 cid OUT binary_integer, -- char ID
580 ncid OUT binary_integer); -- nchar ID
581
582 -- check if char, nchar set match (signal error is not)
583 PROCEDURE kcp_chkchar(
584 cid IN binary_integer, -- char ID
585 ncid IN binary_integer, -- nchar ID
586 chknc IN binary_integer, -- chech nchar (1 or 0)
587 has_clobs IN binary_integer,
588 has_nchars IN binary_integer,
589 char_semantics_on IN binary_integer);
590
591 -- read file header
592 PROCEDURE kcp_rdfh(
593 fname IN varchar2);
594
595 -- convert sb4 to ub4
596 FUNCTION sb4_to_ub4 (
597 b IN binary_integer)
598 RETURN number;
599
600 -- new tablespace
601 PROCEDURE kcp_newts(
602 tsname IN varchar2, -- tablespace name
603 tsid IN binary_integer, -- ts ID
604 n_files IN binary_integer, -- # of datafiles in ts
605 blksz IN binary_integer, -- block size
606 inc_num IN binary_integer, -- inc #
607 cleanSCN IN number, -- cleanSCN
608 dflminext IN binary_integer, -- dflminext in ts$
609 dflmaxext IN binary_integer, -- dflmaxext in ts$
610 dflinit IN binary_integer, -- dflinit in ts$
611 dflincr IN binary_integer, -- dflincr in ts$
612 dflminlen IN binary_integer, -- dflminlen in ts$
613 dflextpct IN binary_integer, -- dflextpct in ts$
614 dflogging IN binary_integer, -- dflogging in ts$
615 bitmapped IN binary_integer, -- bitmapped in ts$
616 dbID IN binary_integer, -- db ID
620 seg_fno IN binary_integer, -- file# in seg$
617 crtSCN IN number, -- creation SCN
618 contents IN binary_integer, -- contents$ in ts$
619 flags IN number, -- flags in ts$
621 seg_bno IN binary_integer, -- block# in seg$
622 seg_blks IN binary_integer); -- blocks in seg$
623
624 -- Plug in datafile
625 PROCEDURE kcp_plgdf(
626 dbID IN binary_integer, -- database ID
627 afn IN binary_integer, -- absolute file #
628 fileBlks IN binary_integer, -- size of file in blocks
629 tsID IN binary_integer, -- tablespace ID
630 rfn IN binary_integer, -- relative file #
631 maxextend IN binary_integer,
632 inc IN binary_integer,
633 crtSCN IN number, -- creation SCN
634 cptSCN IN number, -- checkpoint SCN
635 rstSCN IN number, -- reset SCN
636 spare1 IN binary_integer); -- spare1 in file$
637
638 -- Commit Pluggable
639 PROCEDURE kcp_cmt (
640 data_objn IN number); -- data object number
641
642 -- Initialize kernel data structures
643 PROCEDURE kcp_init;
644
645 -- adjust compatibility level
646 PROCEDURE kcp_acomp (
647 compID IN varchar2, -- compatibility type
648 compRL IN varchar2); -- release level
649
650 -- get current compatible setting
651 --
652 PROCEDURE kcp_getcomp (szcomp OUT varchar2); -- compatible setting
653
654 -- get file header infomation according to file number
655 PROCEDURE kcp_getfh (
656 afn IN binary_integer, -- absolute file number
657 dbID OUT binary_integer, -- database ID
658 ckpt_SCN OUT varchar2, -- checkpoint SCN
659 reset_SCN OUT varchar2, -- reset log SCN
660 hdr_afn OUT binary_integer); -- file# from header
661
662 -- verification checks needed for cross platform transport
663 PROCEDURE kcp_chkxPlatform(
664 srcplatformID IN binary_integer,
665 srcplatformName IN varchar2,
666 tgtplatformID IN binary_integer,
667 tgtplatformName IN varchar2,
668 src_rls_version IN varchar2);
669
670 -- fix up seg$ to reclaim a temp segment
671 PROCEDURE kcp_plg_reclaim_segment(
672 file_no IN binary_integer,
673 block_no IN binary_integer,
674 type_no IN binary_integer,
675 ts_no IN binary_integer,
676 blocks IN binary_integer,
677 extents IN binary_integer,
678 iniexts IN binary_integer,
679 minexts IN binary_integer,
680 maxexts IN binary_integer,
681 extpct IN binary_integer,
682 user_no IN binary_integer,
683 lists IN binary_integer,
684 groups IN binary_integer,
685 bitmapranges IN binary_integer,
686 cachehint IN binary_integer,
687 scanhint IN binary_integer,
688 hwmincr IN number,
689 spare1 IN number,
690 spare2 IN binary_integer);
691
692 -- compute whether a plug into a specified db char and nchar set is
693 -- compatible with current db.
694 PROCEDURE kcp_check_tts_char_set_compat(
695 has_clobs IN binary_integer,
696 has_nchars IN binary_integer,
697 char_semantics_on IN binary_integer,
698 target_charset_name IN varchar2,
699 target_ncharset_name IN varchar2);
700
701 END dbms_plugts;