MINI MINI MANI MO

Path : /proc/self/root/opt/oracle/product/18c/dbhomeXE/ctx/admin/
File Upload :
Current File : //proc/self/root/opt/oracle/product/18c/dbhomeXE/ctx/admin/driutl.pkh

Rem 
Rem $Header: ctx_src_2/src/dr/admin/driutl.pkh /st_rdbms_18.0/1 2018/04/16 21:25:59 nspancha Exp $ 
Rem 
Rem Copyright (c) 1991, 2018, Oracle and/or its affiliates. 
Rem All rights reserved.
Rem  NAME
Rem    dr_utl.pkb - DR Utilities package spec.
Rem  DESCRIPTION
Rem    This package contains the client side services that enable the client
Rem    to control the text index.
Rem
Rem  PUBLIC FUNCTION(S)
Rem    get_utc   - get/parse User, table, column column spec.
Rem    get_policy_id - get policy id
Rem    get_policy    - get the whole policy
Rem    install_callabck - install a callback procedure
Rem  NOTES
Rem
Rem 
Rem  BEGIN SQL_FILE_METADATA
Rem    SQL_SOURCE_FILE: ctx_src_2/src/dr/admin/driutl.pkh
Rem    SQL_SHIPPED_FILE: ctx/admin/driutl.pkh
Rem    SQL_PHASE: DRIUTL_PKH
Rem    SQL_STARTUP_MODE: NORMAL
Rem    SQL_IGNORABLE_ERRORS: NONE
Rem    SQL_CALLING_FILE: ctx/admin/ctxpkh.sql
Rem  END SQL_FILE_METADATA
Rem
Rem  MODIFIED     (MM/DD/YY)
Rem     nspancha   04/12/18 - Backport nspancha_bug-26427905 from main
Rem     nspancha   03/02/18 - Bug 26427905 : Removing Enquote_Parts
Rem     aczarlin   08/16/17 - Bug 26590910: mem_to_number fn sig change
Rem     nspancha   07/31/17 - Bug 25698878: Error for long classifier name
Rem     nspancha   06/26/17 - Bug 25795075: Security Vulnerability
Rem     snetrava   06/05/17 - Constant renamed CHECK_SIMPLE_SQL_NAME
Rem     snetrava   06/01/17 - Remove capitalize EnquoteCompundObjectName
Rem     snetrava   04/07/17 - Added capitalize to EnquoteCompundObjectName
Rem     rodfuent   02/06/17 - Bug 25422217: simplified syntax XML Search Index
Rem     snetrava   02/01/17 - Bug 25119656
Rem     boxia      01/17/17 - Proj 68638: add arg use_idx_id in make_pfx
Rem     shorwitz   01/28/16 - Bug 22213089: remove key before changing index
Rem     boxia      01/15/16 - Bug 22226636: replace user$ with _BASE_USER
Rem     surman     11/21/15 - 22097228: Add p_30_char_names
Rem     shuroy     09/28/15 - Bug 21158339: Adding get_max_string_size
Rem     yinlu      09/09/15 - bug 21245915: idxCreateErrCheck
Rem     boxia      06/19/15 - Bug 12566323: add para txnal to idxCreateErrCheck
Rem     shuroy     06/15/15 - Adding OBJTYPE_PREF
Rem     surman     05/11/15 - 20952246: Remove PINDEX
Rem     shorwitz   03/09/15 - Bug 20533031: long identifier bugs
Rem     surman     01/23/15 - 20411134: Add SQL metadata tags
Rem     shorwitz   08/29/14 - Bug 18772670: Add PL/SQL stack trace
Rem     surman     11/20/14 - Full length index names
Rem     yinlu      05/09/14 - add idxCreateErrCheck
Rem     surman     03/15/13 - 16473661: Common start and end scripts
Rem     hsarkar    12/23/11 - Bug 13002617
Rem     gauryada   12/08/11 - Added is_decimal_value
Rem     gauryada   09/29/11 - Fix error message for invalid size (in bytes)
Rem     ssethuma   06/06/11 - Add get_ctx_doc_polstems
Rem     rpalakod   08/12/10 - Bug 9964749
Rem     rpalakod   03/02/10 - Bug 9439697
Rem     surman     10/06/08 - 7425113: Add validate_storage
Rem     shorwitz   08/11/08 - Bug 7237890: Do not upper case names
Rem     daliao     04/04/05 - add user_exist
Rem     yucheng    10/22/03 - add lock_index 
Rem     yucheng    06/06/03 - add syncmem_to_number
Rem     gkaminag   12/04/02 - move invoker functions
Rem     daliao     10/29/02 - add get_default_prefname
Rem     gkaminag   07/23/02  - 
Rem     gkaminag   07/18/02  - Remove arr_table
Rem     gkaminag   07/02/02  - security phase 2
Rem     gkaminag   06/03/02  - keycomp function.
Rem     ehuang     03/03/02  - .
Rem     gkaminag   10/23/01  - policy loading.
Rem     ehuang     09/03/01 -  extend index_rec
Rem     gkaminag   08/22/00 -  index record version of get_ipartition
Rem     gkaminag   08/15/00 -  add get_partition
Rem     yucheng    08/08/00 -  partition support
Rem     gkaminag   08/09/00 -  local domain partition support
Rem     gkaminag   03/07/00 -  add idx_type to idx_record
Rem     gkaminag   11/01/99 -  multi stoplist
Rem     gkaminag   06/21/99 -  format and charset columns
Rem     gkaminag   06/09/99 -  language column in idx record
Rem     gkaminag   06/07/99 -  multi lexer
Rem     gkaminag   05/21/99 -  trigger prefix
Rem     ehuang     03/01/99 -  add make_pfx
Rem     gkaminag   02/19/99 -  remove pragma
Rem     gkaminag   02/15/99 -  move idx_has_p_table to drixtab
Rem     gkaminag   01/28/99 -  substring indexing
Rem     gkaminag   09/02/98 -  add option to get_user to ignore anonymous block
Rem     gkaminag   08/13/98 -  add idxmem_to_number
Rem     gkaminag   06/29/98 -  bug 683151
Rem     gkaminag   05/19/98 -  mem to number
Rem     gkaminag   05/11/98 -  using object id's
Rem     gkaminag   05/08/98 -  add acess_index
Rem     ehuang     05/08/98 -  index_rec to include all fields
Rem     ehuang     03/30/98 -  dr$policy->dr$index
Rem     ehuang     03/04/98 -  add new record types
Rem     jkud       01/28/98 -  add get_rowid
Rem     gkaminag   09/24/97 -  add verify_lexicon
Rem     dyu        08/21/97 -  work around for 532862
Rem     ymatsuda   08/19/97 -  add PICK_POLICY
Rem     ehuang     07/28/97 -  Bug 518206 - add is_ops
Rem     ehuang     06/04/97 -  Bg 478063 - add get_user
Rem     gkaminag   05/13/97 -  add get_dbid
Rem     ehuang     05/01/97 -  add validate_key
Rem     ehuang     04/28/97 -  add split
Rem     gkaminag   04/17/97 -  add section count
Rem     ymatsuda   04/09/97 -  add lock_table
Rem     ymatsuda   12/16/96 -  add dblink to parse_object_name
Rem     ymatsuda   12/06/96 -  add install_callback
Rem     syang      01/04/97 -  add pkey_toolong()
Rem     qtran      03/10/95 -  added genid routine. return an id value.
Rem     qtran      10/19/94 -  Creation 

@@?/rdbms/admin/sqlsessstart.sql

create or replace package driutl 
as

-- These object types are used by max_name_length to determine the maximum
-- length of an object.  This list must match the same list that appears in
-- dret.h.
OBJTYPE_INDEX      constant number := 1; -- Index name
OBJTYPE_POLICY     constant number := 2; -- Policy name
OBJTYPE_CONSTRAINT constant number := 3; -- Constraint (within internal objs)
OBJTYPE_THESAURUS  constant number := 4; -- Thesaurus name
OBJTYPE_SECTION    constant number := 5; -- Section name
OBJTYPE_PARAM      constant number := 6; -- Parameter
OBJTYPE_FEEDBACK   constant number := 7; -- Feedback column
OBJTYPE_SQE        constant number := 8; -- SQE name
OBJTYPE_LEXER      constant number := 9; -- Lexer name
OBJTYPE_TBS        constant number := 10; -- TBS name
OBJTYPE_ATTR       constant number := 11; -- Attribute
OBJTYPE_IDXSET     constant number := 12; -- Index set name
OBJTYPE_FILENAME   constant number := 13; -- File name
OBJTYPE_COLUMN     constant number := 14; -- Column name
OBJTYPE_LANGUAGE   constant number := 15; -- Language name
OBJTYPE_CHARSET    constant number := 16; -- Charset name
OBJTYPE_PREFERENCE constant number := 17; -- Preference name
OBJTYPE_STOPLIST   constant number := 18; -- Stoplist name
OBJTYPE_DICTIONARY constant number := 19; -- Dictionary name
OBJTYPE_CLA_NAME   constant number := 20; -- Classifier Name

/*-------------------------------- get_dbid --------------------------------*/
/*
  NAME
   get_dbid - get database identifier
  DESCRIPTION
   returns a number which is unique to the database (in OPS, there are
   multiple databases sharing a disk)
*/
function get_dbid return number;
--  pragma restrict_references ( get_dbid, WNDS );

/*--------------------------- parse_object_name ----------------------------*/
/* parse object name user.name */

procedure parse_object_name(
  spec  in     varchar2, 
  uname in out varchar2, 
  oname in out varchar2
)
accessible by (PACKAGE drvutl, PROCEDURE parse_object_name);

/*----------------------------- split_list --------------------------------*/
/*
  NAME
    split_list - 

  DESCRIPTION
    A list can be contiguous or non-contiguous.

    list=1,500,   contiguous=1 is a contig. list
    list=1,4,5,6  contiguous=0 is a non-contig list

    if we required 20 in the first list, it will be splited into:
      lower_list=1,20
      upper_list=21,500

    if we required 2 in the second list, it will be splited into:
      lower_list=1,4
      upper_list=5,6

  ARGUMENTS
   list          (in)  the list 
   contiguous    (in)  1= contig. 0=non-contig
   size_required (in)  list length
   lower_list    (out) lower list after splited
   upper_list    (out) upper list after splited

  NOTES  
   None
  EXCEPTIONS

  RETURNS
    none
*/

procedure split_list(
  list in varchar2, 
  contiguous    in number, 
  size_required in number,
  lower_list    out varchar2,
  upper_list    out varchar2
);


/*-------------------------------- split -----------------------------------*/
/*
  NAME
    split

  DESCRIPTION
    Takes a list of values separated by a delimiter and return a
    array containing the values. a delimiter character preceded
    by a backslash will be treated as part of the value instead.
 
  ARGUMENTS
    vlist      -    list of values                                           
    delimiter  -    the delimiter, one character only                         
    varr       -    array of values

  NOTES
  
  EXCEPTIONS
  
  RETURNS
*/
PROCEDURE split(                                                               
  vlist       in      varchar2                                              
, delimiter   in      varchar2
, varr        in out  dr_def.vc256_tab
);

/*---------------------------------- genid ---------------------------------*/
/*
  NAME
    genid - generate an TexTile dictionary id number 
  DESCRIPTION
    TexTile dict. id number is used to assigned to INDEX or PREFERENCE.

  ARGUMENTS
    None
  NOTES
           
  EXCEPTIONS

  RETURNS
    id number
*/
function genid return number;


/*---------------------------- pkey_toolong ---------------------------------*/
/*
  NAME
    pkey_toolong - check a length of a given primary key is too long or not
  DESCRIPTION
    as pkey can be an encoded composite pkey string, the checking need to be
    done on the overall length and the individual textkey length

  ARGUMENTS
    pk -- primary key string
  NOTES
           
  EXCEPTIONS

  RETURNS
    toolong boolean
*/
function pkey_toolong(pk in varchar2) return boolean;


/*---------------------------- get_user ------------------------------*/
/*
  NAME
    get_user - get the effective user

  DESCRIPTION
    returns the user name of user who directly calls  CTXSYS.(DR_% or
    (CTX_%)
 
    e.g.
    USER_B has CTXAPP priv, USER_A does not. USER_B grants execute on
    proc2 to USER_A.  

    USER_A.proc1 -> USER_B.proc2 -> CTXSYS.(DR_% or CTX_%)

    the effective user is USER_B, not USER_A. 

    Must call get_user to return the effective user to be passed to
    DRIACC.CAN

  ARGUMENTS
    
  NOTES
           
  EXCEPTIONS
*/
function get_user(ignore_anon in boolean default FALSE) return varchar2;

/*---------------------------- get_user_id ---------------------------*/
/*
  NAME
    get_user_id - get user# from sys."_BASE_USER"
*/
function get_user_id(p_username in varchar2) return number;

/*---------------------------- get_user_name ---------------------------*/
/* opposite of get_user_id */

function get_user_name(p_userid in binary_integer) return varchar2;

/*---------------------------- get_obj_id ---------------------------*/
/*
  NAME
    get_obj_id - get obj# from sys.obj$
*/
function get_obj_id(p_user_name in varchar2, p_object_name in varchar2,
                    p_partition_name in varchar2 default NULL) 
return number;

/*---------------------------- is_ops ------------------------------*/
/*
  NAME
    is_ops

  DESCRIPTION
    returns TRUE when running in parallel server mode, FALSE otherwise
  ARGUMENTS
    
  NOTES
           
  EXCEPTIONS
*/
function is_ops return boolean;

/*---------------------------- mem_to_number --------------------------*/
/*
  NAME
    mem_to_number 

  DESCRIPTION
    Converts inputs like 1k, 10G, 12M to their approriate value in bytes
  ARGUMENTS
    memstring - Input string, may be a number or one of these formats:
                10K, 10M, 10G    
    llimit    - Lower limit to the number that memstring can represent
    ulimit    - Upper limit to the number that memstring can represent
    attname   - name of attribute for the memstring (the value)
  NOTES
           
  EXCEPTIONS
    Throw an error if memstring doesn't lie in range (llimit, ulimit)
*/
function mem_to_number(memstring in varchar2, 
                       llimit in number, ulimit in number, 
                       attname in varchar2) 
return number;

/*---------------------------- idxmem_to_number --------------------------*/
/*
  NAME
    idxmem_to_number

  DESCRIPTION
    a bit more specialized -- this converts an idxmem string to a number.
    if passed null it will return DEFAULT_INDEX_MEMORY.

  ARGUMENTS
    
  NOTES
           
  EXCEPTIONS
*/
function idxmem_to_number(memstring in varchar2) return number;

/*---------------------------- syncmem_to_number --------------------------*/
/*
  NAME
    syncmem_to_number

  DESCRIPTION
    a bit more specialized -- this converts an syncmem string to a number.
    if passed null it will return idexmem.

  ARGUMENTS
    
  NOTES
           
  EXCEPTIONS
*/
function syncmem_to_number(memstring in varchar2,
                           idxmem    in number) 
return number;

/*--------------------------- make_pfx ------------------------------------*/
/*
  NAME
    make_pfx

  DESCRIPTION
    create proper index prefix

  ARGUMENTS
    
  NOTES
           
  EXCEPTIONS
*/

FUNCTION make_pfx (idx_owner in varchar2, idx_name in varchar2, 
                   pfx_type  in varchar2 default '$',
                   part_id   in number default null,
                   constraint_pfx in boolean default FALSE,
                   idx_id    in number default null,
                   full_length_objs in boolean default null,
                   thirty_char_names in boolean default null,
                   use_idx_id in boolean default null)
return varchar2;

/*--------------------------- check_language -----------------------------*/
/*
  NAME
    check_language

  DESCRIPTION
    check a string to ensure it is a valid NLS language value
    returns NLS version of language name and abbreviation

  ARGUMENTS
    
  NOTES
           
  EXCEPTIONS
*/

FUNCTION check_language (
  lang     in  varchar2,
  nls_lang out varchar2,
  nls_abb  out varchar2,
  def_ok   in  boolean default TRUE
) return boolean;

/*--------------------------- lang_to_abbr -----------------------------*/
/*
  NAME
    lang_to_abbr

  DESCRIPTION
    given an NLS language name, return the NLS abbreviation

  ARGUMENTS
    
  NOTES
    callable from SQL.  
    Must be a valid language, in uppercase.
    if lang is unknown, then NULL is returned.
  EXCEPTIONS
*/

FUNCTION lang_to_abbr (
  lang     in  varchar2
) return varchar2;
pragma restrict_references (lang_to_abbr, wnds, wnps, rnds, rnps);

/*---------------------------- keycomp_ok ----------------------------------*/
/* test database, return TRUE if key compressed indexes are enabled */

FUNCTION keycomp_ok return BOOLEAN;

/*---------------------- verify_np_index_tables ----------------------------*/

PROCEDURE verify_np_index_tables (
  idx_owner in varchar2,
  idx_name  in varchar2,
  idx_id    in number,
  idx_pid   in number
);

/*--------------------------- get_slave_id --------------------------------*/

PROCEDURE get_slave_id(
  slaveid     out  varchar2
);

/*--------------------------- get_default_prefname ----------------------*/
/* finding the default value by given the name of default preference */
FUNCTION get_default_value(
  defname       in   varchar2
) return varchar2;

/*---------------------------- bytestr -------------------------------*/
/* return a byte amount in readble form */

function bytestr (a in number) return varchar2;

/*---------------------------- numstr ---------------------------------*/
/* return a large number in readable form */

function numstr (a in number) return varchar2;

/*---------------------------- pctstr ---------------------------------*/
/* calculate and return a percentage in readable form */

function pctstr (fig in number, base in number, rnd in number default 2) 
return varchar2;

/*---------------------------- NormalizeObjectName --------------------------*/
/* Normalize a name by stripping quotes and upper casing. */

DO_NOT_VALIDATE_SQL_NAME constant number := 0;
CHECK_SIMPLE_SQL_NAME constant number := 1;

function NormalizeObjectName
(
  object_name in varchar2,
  validation  in number default DO_NOT_VALIDATE_SQL_NAME
) return varchar2;

/*----------------------- EnquoteCompoundObjectName --------------------------*/
/* Enquote a composite name by enquoting dot seperated parts and upper casing */
/* unquoted parts */
/*
  scott.emp      -> "SCOTT"."EMP"
  O--Brian.Emp   -> ORA-44004
  "O--Brian".Emp -> "O--Brian"."EMP"
*/
function EnquoteCompoundObjectName
(
  object_name in varchar2
) return varchar2;

procedure lock_index(idxid in number);

procedure lock_partition(idxid in number, ixpid in number);

/* ---------------------------- validate_storage ----------------------*/
/* Added for bug 7425113.  Validates the supplied storage clause string
 * and raises errors for suspect values (such as embedded comments) which
 * could be signs of potential SQL injection.  If there are no errors
 * then storage_clause is returned unchanged.
 */
function validate_storage(clause_value in varchar2,
                          clause_name in varchar2)
  return varchar2;

/*--------------------------- get_hash_area_size ---------------------------*/
function get_hash_area_size return number;
procedure set_hash_area_size(hashmem in number);

/*---------------------------get_max_string_size---------------------------*/
function get_max_string_size return varchar2;

/*------------------------- CheckNumLangIndSLXSW --------------------------*/
/* This function checks the number of remaining language independent sublexers
 * and stopwords in the index.
 */
FUNCTION CheckNumLangIndSLXSW(
  idx_id in number
) return number;

/*---------------------------- get_ctx_doc_polstem --------------------------*/
/* get _ctx_doc_policy_stems parameter for this instance */
function get_ctx_doc_polstems
return boolean;

/*------------------------------ is_decimal_value --------------------------*/
/* Is this number a decimal value or not ? */
function is_decimal_value(value number)
return boolean;

/*---------------------------- is_shadow_index --------------------------*/
/* check if index being refered to is a shadow index */
function is_shadow_index(idx_name varchar2)
return boolean;

/*---------------------------- parse_shadow_index --------------------------*/
/* parse shadow index to get index id and partition id */
procedure parse_shadow_index(rio_idx_name in     varchar2,
                             idx_id       in out number,
                             idx_suffix   in out varchar2
);

/*---------------------------- get_shadow_index --------------------------*/
/* get shadow index given base index id */
function get_shadow_index(idx_name   in varchar2,
                          idx_suffix in varchar2
)
return varchar2;

/*------------------------ idxCreateErrCheck ------------------------*/
/* disallow xml_enable on non-XMLType or XMLType OR storage */
PROCEDURE idxCreateErrCheck(
  sg_name            in  varchar2,
  table_owner        in  varchar2,
  table_name         in  varchar2,
  column_type_schema in  varchar2,
  column_type        in  varchar2,
  txnal              in  varchar2,
  idx_texttype       in  number default -1,
  xml_simple_syntax  in  boolean default FALSE);

/*------------------------ druebrk ------------------------*/
PROCEDURE druebrk;

/*------------------------ DumpPLSQLStack ------------------------*/
/* Dump the PL/SQL stack to the trace log file. */
PROCEDURE DumpPLSQLStack;


/*------------------------------ max_name_length ----------------------------*/
/*
  NAME
    max_name_length - Compute and return the maximum length of an object's name
  DESCRIPTION
    Returns the maximum length of the object, based on the object type,
    database compatible settings, and whether full length index names are
    enabled.
  NOTES
    Full length index names are disabled by setting level 4 for event 30580.
  ARGUMENTS
    p_obj_type   - One of the OBJTYPE constants defined in the package header
    p_partition  - If TRUE, return the maximum length assuming the object is
                   partitioned
    p_full_length_objs - If TRUE, consider full length objects enabled
    p_pfx_check  - If TRUE, we are called from make_pfx.  In this case return
                   the point at which the name needs to be truncated.
    p_30_char_names - If TRUE, consider the maximum length of a database object
                   to be 30, even if compatible >= 12.2
  EXCEPTIONS
    dr_def.textile_error if p_obj_type is not one of the OBJTYPE constants
  RETURNS
    Maximum length for the given object
*/
FUNCTION max_name_length(
  p_obj_type IN NUMBER,
  p_partition IN BOOLEAN,
  p_full_length_objs IN BOOLEAN,
  p_30_char_names IN BOOLEAN,
  p_pfx_check IN BOOLEAN := FALSE)
RETURN NUMBER;

/*---------------------------- trim_quotes --------------------------*/
/*
  NAME
    trim_quotes 

  DESCRIPTION
    Remove surrounding quotes from a string
  ARGUMENTS
    str - the string to remove the quotes from
  NOTES
           
  EXCEPTIONS
*/

function trim_quotes(str in varchar2)
return varchar2;

end driutl;
/

@?/rdbms/admin/sqlsessend.sql

OHA YOOOO