home *** CD-ROM | disk | FTP | other *** search
/ Winzipper / Winzipper_ISO.iso / programming / oracle7 7.2 / DB / UTIL72 / STANDARD.SQL < prev    next >
Encoding:
Text File  |  1995-05-18  |  54.4 KB  |  1,606 lines

  1. rem 
  2. rem $Header: standard.sql 7020200.1 95/02/15 18:17:32 cli Generic<base> $ 
  3. rem 
  4. Rem  Copyright (c) 1991 by Oracle Corporation 
  5. Rem    NAME
  6. Rem      standard.sql - standard types and functions
  7. Rem                  
  8. Rem    DESCRIPTION
  9. Rem      This is generated in a PLSQL dve from stdspc.pls and stdbdy.pls
  10. Rem      using a PLSQL tool (ps2s.pls). At release times, this file
  11. Rem      should be checked out and the old generated portion below
  12. Rem      should be replaced by the new generated portion.
  13. Rem
  14. Rem    RETURNS
  15. Rem 
  16. Rem    NOTES
  17. Rem      <other useful comments, qualifications, etc.>
  18. Rem
  19. Rem    MODIFIED   (MM/DD/YY)
  20. Rem     cbarclay   02/01/95 -  adding exception ROWTYPE_MISMATCH
  21. Rem     llao       07/06/94 -  update timestamp for diana reorg
  22. Rem     btaymour   03/22/94 -  Regen:Merg changes from 7.1, old time stamp
  23. Rem     spuranik   08/24/93 -  for tag k70101
  24. Rem     kaghevli   12/18/92 -  for tag k70012 
  25. Rem     hrizvi     12/06/92 -  for tag i92_12_06 
  26. Rem     hrizvi     12/06/92 -  for tag i92_12_06 
  27. Rem     kaghevli   11/28/92 -  for tag i92_11_28 
  28. Rem     rhari      11/26/92 -  typo 
  29. Rem     rhari      11/26/92 -  add special characters for new tag scheme 
  30. Rem     kaghevli   11/21/92 -  Creation 
  31. Rem 
  32. Rem the following line is not to be changed. It should be the last line
  33. Rem in this rcs header. The portion below it is generated.
  34. Rem ##$$##
  35.  
  36. create or replace package STANDARD -- TIMESTAMP is comment on next line in file stdspc.pls
  37.  timestamp '1994-07-04:00:00:00' -- utility p2s inserts this into .sql file
  38.  is
  39.  
  40.   type BOOLEAN is (FALSE, TRUE);
  41.  
  42.   type DATE is DATE_BASE;
  43.  
  44.   type NUMBER is NUMBER_BASE;
  45.   subtype FLOAT is NUMBER; -- NUMBER(126)
  46.   subtype REAL is FLOAT; -- FLOAT(63)
  47.   subtype "DOUBLE PRECISION" is FLOAT;
  48.  
  49. -- other number subtypes
  50.   subtype INTEGER is NUMBER(38,0);
  51.   subtype INT is INTEGER;
  52.   subtype SMALLINT is NUMBER(38,0);
  53.   subtype DECIMAL is NUMBER(38,0);
  54.   subtype NUMERIC is DECIMAL;
  55.   subtype DEC is DECIMAL;
  56.  
  57.  
  58.   subtype BINARY_INTEGER is INTEGER range '-2147483647'..2147483647;
  59. --                used to be -2147483648 - less than MAXSB4MINVAL
  60.   subtype NATURAL is BINARY_INTEGER range 0..2147483647;
  61.   subtype NATURALN is NATURAL not null;
  62.   subtype POSITIVE is BINARY_INTEGER range 1..2147483647;
  63.   subtype POSITIVEN is POSITIVE not null;
  64.   subtype SIGNTYPE is BINARY_INTEGER range '-1'..1;  -- for SIGN functions
  65.  
  66.   type VARCHAR2 is NEW CHAR_BASE;
  67.   pragma PACK(VARCHAR2);
  68.  
  69.   subtype VARCHAR is VARCHAR2;
  70.   subtype STRING is VARCHAR2;
  71.  
  72.   subtype LONG is VARCHAR2(32760);
  73.  
  74.   subtype RAW is VARCHAR2;
  75.   subtype "LONG RAW" is RAW(32760);
  76.  
  77.   subtype ROWID is VARCHAR2(256);
  78.  
  79.   -- Ansi fixed-length char
  80.   -- Define synonyms for CHAR and CHARN.
  81.   subtype CHAR is VARCHAR2;
  82.   subtype CHARACTER is CHAR;
  83.  
  84.   type MLSLABEL is new CHAR_BASE;
  85. --  subtype MLSLABEL is MLSLABEL_BASE(256); 
  86.  
  87.  
  88. --***************** Predefined exceptions *****************
  89.  
  90.   CURSOR_ALREADY_OPEN exception;
  91.     pragma EXCEPTION_INIT(CURSOR_ALREADY_OPEN, '-6511');
  92.  
  93.   DUP_VAL_ON_INDEX exception;
  94.     pragma EXCEPTION_INIT(DUP_VAL_ON_INDEX, '-0001');
  95.  
  96.   TIMEOUT_ON_RESOURCE exception;
  97.     pragma EXCEPTION_INIT(TIMEOUT_ON_RESOURCE, '-0051');
  98.  
  99. --TRANSACTION_BACKED_OUT exception;
  100. --  pragma EXCEPTION_INIT(TRANSACTION_BACKED_OUT, '-0061');
  101.  
  102.   INVALID_CURSOR exception;
  103.     pragma EXCEPTION_INIT(INVALID_CURSOR, '-1001');
  104.  
  105.   NOT_LOGGED_ON exception;
  106.     pragma EXCEPTION_INIT(NOT_LOGGED_ON, '-1012');
  107.  
  108.   LOGIN_DENIED exception;
  109.     pragma EXCEPTION_INIT(LOGIN_DENIED, '-1017');
  110.  
  111.   NO_DATA_FOUND exception;
  112.     pragma EXCEPTION_INIT(NO_DATA_FOUND, 100);
  113.  
  114.   ZERO_DIVIDE exception;
  115.     pragma EXCEPTION_INIT(ZERO_DIVIDE, '-1476');
  116.  
  117.   INVALID_NUMBER exception;
  118.     pragma EXCEPTION_INIT(INVALID_NUMBER, '-1722');
  119.  
  120.   TOO_MANY_ROWS exception;
  121.     pragma EXCEPTION_INIT(TOO_MANY_ROWS, '-1422');
  122.  
  123.   STORAGE_ERROR exception;
  124.     pragma EXCEPTION_INIT(STORAGE_ERROR, '-6500');
  125.  
  126.   PROGRAM_ERROR exception;
  127.     pragma EXCEPTION_INIT(PROGRAM_ERROR, '-6501');
  128.  
  129.   VALUE_ERROR exception;
  130.     pragma EXCEPTION_INIT(VALUE_ERROR, '-6502');
  131.  
  132.  
  133. --****************************************************************
  134.  
  135.   function "EXISTS" return BOOLEAN;
  136.     pragma BUILTIN('EXISTS',10,240,240); -- This is special cased in PH2 -- Pj
  137.  
  138.   function GREATEST (pattern NUMBER) return NUMBER;
  139.     pragma BUILTIN('GREATEST',12,240,240);-- This is special cased in PH2 -- Pj
  140.   function GREATEST (pattern VARCHAR2) return VARCHAR2;
  141.     pragma BUILTIN('GREATEST',12,240,240);-- This is special cased in PH2 -- Pj
  142.   function GREATEST (pattern DATE) return DATE;
  143.     pragma BUILTIN('GREATEST',12,240,240);-- This is special cased in PH2 -- Pj
  144.  
  145.   function LEAST (pattern NUMBER) return NUMBER;
  146.     pragma BUILTIN('LEAST',13,240,240);-- This is special cased in PH2 -- Pj
  147.   function LEAST (pattern VARCHAR2) return VARCHAR2;
  148.     pragma BUILTIN('LEAST',13,240,240);-- This is special cased in PH2 -- Pj
  149.   function LEAST (pattern DATE) return DATE;
  150.     pragma BUILTIN('LEAST',13,240,240);-- This is special cased in PH2 -- Pj
  151.  
  152.   function DECODE (expr NUMBER, pat NUMBER, res NUMBER) return NUMBER;
  153.     pragma BUILTIN('DECODE',22,240,240);-- This is special cased in PH2 -- Pj
  154.   function DECODE (expr NUMBER, pat NUMBER, res VARCHAR2) return VARCHAR2;
  155.     pragma BUILTIN('DECODE',22,240,240);-- This is special cased in PH2 -- Pj
  156.   function DECODE (expr NUMBER, pat NUMBER, res DATE) return DATE;
  157.     pragma BUILTIN('DECODE',22,240,240);-- This is special cased in PH2 -- Pj
  158.  
  159.   function DECODE (expr VARCHAR2, pat VARCHAR2, res NUMBER) return NUMBER;
  160.     pragma BUILTIN('DECODE',22,240,240);-- This is special cased in PH2 -- Pj
  161.   function DECODE (expr VARCHAR2, pat VARCHAR2, res VARCHAR2)
  162.      return VARCHAR2;
  163.     pragma BUILTIN('DECODE',22,240,240);-- This is special cased in PH2 -- Pj
  164.   function DECODE (expr VARCHAR2, pat VARCHAR2, res DATE) return DATE;
  165.     pragma BUILTIN('DECODE',22,240,240);-- This is special cased in PH2 -- Pj
  166.  
  167.   function DECODE (expr DATE, pat DATE, res NUMBER) return NUMBER;
  168.     pragma BUILTIN('DECODE',22,240,240);-- This is special cased in PH2 -- Pj
  169.   function DECODE (expr DATE, pat DATE, res VARCHAR2) return VARCHAR2;
  170.     pragma BUILTIN('DECODE',22,240,240);-- This is special cased in PH2 -- Pj
  171.   function DECODE (expr DATE, pat DATE, res DATE) return DATE;
  172.     pragma BUILTIN('DECODE',22,240,240);-- This is special cased in PH2 -- Pj
  173.  
  174.   function SQLCODE return NUMBER;
  175.     pragma BUILTIN('SQLCODE',45, 10, 0); -- PEMS_DB, DB_SQLCODE
  176.  
  177.   function SQLERRM return varchar2;
  178.     pragma FIPSFLAG('SQLERRM', 1452);    
  179.  
  180.   function SQLERRM (code NUMBER) return varchar2;
  181.     pragma BUILTIN('SQLERRM',46, 10, 1); -- PEMS_DB, DB_SQLERRM
  182.     pragma FIPSFLAG('SQLERRM', 1452);    
  183.  
  184.   function LEVEL return NUMBER;
  185.  
  186.   function ROWNUM return NUMBER;
  187.  
  188.   function '='  (LEFT BOOLEAN, RIGHT BOOLEAN) return BOOLEAN;
  189.     pragma BUILTIN('=',2, 3, 1); -- PEMS_INTEGER, PEMDCMEQ
  190.     pragma FIPSFLAG('=', 1450);    
  191.   function '!=' (LEFT BOOLEAN, RIGHT BOOLEAN) return BOOLEAN; -- also <> and ~=
  192.     pragma BUILTIN('!=',5, 3, 2); -- PEMS_INTEGER, PEMDCMNE
  193.     pragma FIPSFLAG('!=', 1450);    
  194.   function '<'  (LEFT BOOLEAN, RIGHT BOOLEAN) return BOOLEAN;
  195.     pragma BUILTIN('<',4, 3, 3);  -- PEMS_INTEGER, PEMDCMLT
  196.     pragma FIPSFLAG('<', 1450);    
  197.   function '<=' (LEFT BOOLEAN, RIGHT BOOLEAN) return BOOLEAN;
  198.     pragma BUILTIN('<=',6, 3, 4); -- PEMS_INTEGER, PEMDCMLE
  199.     pragma FIPSFLAG('<=', 1450);    
  200.   function '>'  (LEFT BOOLEAN, RIGHT BOOLEAN) return BOOLEAN;
  201.     pragma BUILTIN('>',1, 3, 5); -- PEMS_INTEGER, PEMDCMGT
  202.     pragma FIPSFLAG('>', 1450);    
  203.   function '>=' (LEFT BOOLEAN, RIGHT BOOLEAN) return BOOLEAN;
  204.     pragma BUILTIN('>=',3, 3, 6); -- PEMS_INTEGER, PEMDMGE
  205.     pragma FIPSFLAG('>=', 1450);    
  206.  
  207.   --  Since SQL permits short-circuit evaluation, the 'and' and 'or'
  208.   --  operations will always be interpreted as 'and then' and 'or else'
  209.   --  when they occur in conditional statements.
  210.  
  211.   function XOR (LEFT BOOLEAN, RIGHT BOOLEAN) return BOOLEAN;
  212.     pragma BUILTIN('XOR',8, 3, 9); -- PEMS_INTEGER, INT_XOR
  213.     pragma FIPSFLAG('XOR', 1450);    
  214.  
  215.   function 'NOT' (RIGHT BOOLEAN) return BOOLEAN;
  216.     pragma BUILTIN('NOT',9, 3, 10); -- PEMS_INTEGER, INT_NOT
  217.  
  218.   function 'IS NULL' (B BOOLEAN) return BOOLEAN;
  219.     pragma BUILTIN('IS NULL', 0, 3, 0);  -- PEMS_INTEGER, PEMDNUL
  220.     pragma FIPSFLAG('IS NULL', 1450);    
  221.  
  222.   function 'IS NOT NULL' (B BOOLEAN) return BOOLEAN;
  223.     pragma FIPSFLAG('IS NOT NULL', 1450);    
  224.  
  225.   function NVL (B1 BOOLEAN, B2 BOOLEAN) return BOOLEAN;
  226.     pragma FIPSFLAG('NVL', 1450);    
  227.  
  228. --****************************************************************
  229.  
  230.   function '='  (LEFT VARCHAR2, RIGHT VARCHAR2) return BOOLEAN;
  231.     pragma BUILTIN('=',2, 1, 14); -- PEMS_CHAR, PEMDCMEQ (VARCHAR2 SEMANTICS)
  232.     pragma FIPSFLAG('=', 1454);    
  233.   function '!=' (LEFT VARCHAR2, RIGHT VARCHAR2) return BOOLEAN;
  234.     pragma BUILTIN('!=',5, 1, 15);  -- PEMS_CHAR, PEMDCMNE (VARCHAR2 SEMANTICS)
  235.     pragma FIPSFLAG('!=', 1454);    
  236.   function '<'  (LEFT VARCHAR2, RIGHT VARCHAR2) return BOOLEAN;
  237.     pragma BUILTIN('<',4, 1, 16); -- PEMS_CHAR, PEMDCMLT (VARCHAR2 SEMANTICS)
  238.     pragma FIPSFLAG('<', 1454);    
  239.   function '<=' (LEFT VARCHAR2, RIGHT VARCHAR2) return BOOLEAN;
  240.     pragma BUILTIN('<=',6, 1, 17); -- PEMS_CHAR, PEMDCMLE (VARCHAR2 SEMANTICS)
  241.     pragma FIPSFLAG('<=', 1454);    
  242.   function '>'  (LEFT VARCHAR2, RIGHT VARCHAR2) return BOOLEAN;
  243.     pragma BUILTIN('>',1, 1, 18); -- PEMS_CHAR, PEMDCMGT (VARCHAR2 SEMANTICS)
  244.     pragma FIPSFLAG('>', 1454);    
  245.   function '>=' (LEFT VARCHAR2, RIGHT VARCHAR2) return BOOLEAN;
  246.     pragma BUILTIN('>=',3, 1, 19); -- PEMS_CHAR, PEMDCMGE (VARCHAR2 SEMANTICS)
  247.     pragma FIPSFLAG('>=', 1454);    
  248.  
  249.   function '||' (LEFT VARCHAR2, RIGHT VARCHAR2) return VARCHAR2;
  250.     pragma BUILTIN('||',25, 1, 7); -- PEMS_CHAR, CHAR_CONCAT
  251.     pragma FIPSFLAG('||', 1454);    
  252.  
  253.   function CONCAT(LEFT VARCHAR2, RIGHT VARCHAR2) return varchar2;
  254.     pragma BUILTIN(CONCAT,25, 1, 7); -- PEMS_CHAR, CHAR_CONCAT
  255.     pragma FIPSFLAG(CONCAT, 1454);    
  256.  
  257.  
  258.   function LENGTH(ch VARCHAR2) return natural;
  259.     pragma FIPSFLAG('LENGTH', 1452);    
  260.  
  261.   -- In SUBSTR, LEN defaults to remainder of string
  262.   -- In substr and instr, a negative value of parameter POS means to
  263.   -- count from the right end of the string.
  264.   function SUBSTR(STR1 VARCHAR2, POS binary_integer, 
  265.             LEN binary_integer := NULL)
  266.     return varchar2;
  267.     pragma FIPSFLAG('SUBSTR', 1452);    
  268.  
  269.   -- Find nth occurrence of str1 in str2 starting at pos
  270.   function INSTR(STR1 VARCHAR2, STR2 VARCHAR2, POS BINARY_INTEGER := 1,
  271.                  NTH POSITIVE := 1) return BINARY_INTEGER;
  272.     pragma FIPSFLAG('INSTR', 1452);    
  273.  
  274.   function UPPER(ch VARCHAR2) return varchar2;
  275.     pragma FIPSFLAG('UPPER', 1452);    
  276.   function LOWER(ch VARCHAR2) return varchar2;
  277.     pragma FIPSFLAG('LOWER', 1452);    
  278.   function ASCII(ch VARCHAR2) return BINARY_INTEGER; -- should be ASCII.CHRANGE
  279.     pragma FIPSFLAG('ASCII', 1452);    
  280.   function CHR(n BINARY_INTEGER) return varchar2;  -- N should be ASCII.CHRANGE
  281.     pragma FIPSFLAG('CHR', 1452);    
  282.   function INITCAP(ch VARCHAR2) return varchar2;
  283.     pragma FIPSFLAG('INITCAP', 1452);    
  284.   function SOUNDEX(ch VARCHAR2) return varchar2;
  285.     pragma FIPSFLAG('SOUNDEX', 1452);    
  286.  
  287.   function LPAD(STR1 VARCHAR2, LEN binary_integer,
  288.         PAD VARCHAR2 := ' ') return VARCHAR2;
  289.     pragma FIPSFLAG('LPAD', 1452);    
  290.  
  291.   function RPAD(STR1 VARCHAR2, LEN binary_integer,
  292.         PAD VARCHAR2 := ' ') return VARCHAR2;
  293.     pragma FIPSFLAG('RPAD', 1452);     
  294.  
  295.   function TRANSLATE(STR1 VARCHAR2, SRC VARCHAR2, DEST VARCHAR2)
  296.     return VARCHAR2;
  297.     pragma FIPSFLAG('TRANSLATE', 1452);    
  298.  
  299.   function REPLACE(SRCSTR VARCHAR2, OLDSUB VARCHAR2,
  300.            NEWSUB VARCHAR2 := '') return VARCHAR2;
  301.     pragma FIPSFLAG('REPLACE', 1452);
  302.  
  303.   function LTRIM(STR1 VARCHAR2 := ' ',
  304.           TSET VARCHAR2 := ' ') return VARCHAR2;
  305.     pragma FIPSFLAG('LTRIM', 1452);
  306.  
  307.   function RTRIM(STR1 VARCHAR2 := ' ',
  308.           TSET VARCHAR2 := ' ') return VARCHAR2;
  309.     pragma FIPSFLAG('RTRIM', 1452);
  310.  
  311.   function 'LIKE' (str VARCHAR2, pat VARCHAR2) return BOOLEAN;
  312.   function 'NOT_LIKE' (str VARCHAR2, pat VARCHAR2) return BOOLEAN;
  313.   function 'LIKE' (str VARCHAR2, pat VARCHAR2, esc VARCHAR2) return BOOLEAN;
  314.   function 'NOT_LIKE' (str VARCHAR2, pat VARCHAR2, esc VARCHAR2) 
  315.     return BOOLEAN;
  316.   function 'IS NULL' (s VARCHAR2) return BOOLEAN;
  317.     pragma BUILTIN('IS NULL', 0, 1, 20);  -- PEMS_CHAR, PEMDNUL
  318.   function 'IS NOT NULL' (s VARCHAR2) return BOOLEAN;
  319.  
  320.   function NVL(s1 VARCHAR2, s2 VARCHAR2) return VARCHAR2;
  321.     pragma FIPSFLAG('NVL', 1452);
  322.  
  323.  
  324. --****************************************************************
  325.  
  326.   function '='  (LEFT NUMBER, RIGHT NUMBER) return BOOLEAN;
  327.     pragma BUILTIN('=',2, 2, 1); -- PEMS_NUMBER, PEMDCMEQ
  328.   function '!=' (LEFT NUMBER, RIGHT NUMBER) return BOOLEAN;  -- also <> and ~=
  329.     pragma BUILTIN('!=',5, 2, 2); -- PEMS_NUMBER, PEMDCMNE
  330.     pragma FIPSFLAG('!=', 1452);
  331.   function '<'  (LEFT NUMBER, RIGHT NUMBER) return BOOLEAN;
  332.     pragma BUILTIN('<',4, 2, 3); -- PEMS_NUMBER, PEMDCMLT
  333.   function '<=' (LEFT NUMBER, RIGHT NUMBER) return BOOLEAN;
  334.     pragma BUILTIN('<=',6, 2, 4); -- PEMS_NUMBER, PEMDCMLE
  335.   function '>'  (LEFT NUMBER, RIGHT NUMBER) return BOOLEAN;
  336.     pragma BUILTIN('>',1, 2, 5); -- PEMS_NUMBER, PEMDCMGT
  337.   function '>=' (LEFT NUMBER, RIGHT NUMBER) return BOOLEAN;
  338.     pragma BUILTIN('>=',3, 2, 6); -- PEMS_NUMBER, PEMDCMGE
  339.  
  340.   function 'IS NULL' (n NUMBER) return BOOLEAN;
  341.     pragma BUILTIN('IS NULL', 0, 2, 0); -- PEMS_NUMBER, PEMDNUL
  342.   function 'IS NOT NULL' (n NUMBER) return BOOLEAN;
  343.   function NVL(n1 NUMBER, n2 NUMBER) return NUMBER;
  344.     pragma FIPSFLAG('NVL', 1452);
  345.  
  346.   function '+' (RIGHT NUMBER) return NUMBER;
  347.     pragma BUILTIN('+',14, 0, 1); -- PEMS_QUICK
  348.   function '-' (RIGHT NUMBER) return NUMBER;
  349.     pragma BUILTIN('-',15, 2, 7); -- PEMS_NUMBER, NUM_NEG
  350.   function ABS(n NUMBER) return NUMBER;
  351.     pragma FIPSFLAG('ABS', 1452);
  352.  
  353.   function '+' (LEFT NUMBER, RIGHT NUMBER) return NUMBER;
  354.     pragma BUILTIN('+',14, 2, 8); -- PEMS_NUMBER, NUM_ADD
  355.   function '-' (LEFT NUMBER, RIGHT NUMBER) return NUMBER;
  356.     pragma BUILTIN('-',15, 2, 9); -- PEMS_NUMBER, NUM_SUB
  357.   function '*' (LEFT NUMBER, RIGHT NUMBER) return NUMBER;
  358.     pragma BUILTIN('*',17, 2, 10); -- PEMS_NUMBER, NUM_MUL
  359.   function '/' (LEFT NUMBER, RIGHT NUMBER) return NUMBER;
  360.     pragma BUILTIN('/',18, 2, 11); -- PEMS_NUMBER, NUM_DIV
  361.  
  362.   function 'REM' (LEFT NUMBER, RIGHT NUMBER) return NUMBER;
  363.     pragma FIPSFLAG('REM', 1452);
  364.   function 'MOD'(n1 NUMBER, n2 NUMBER) return NUMBER;
  365.     pragma FIPSFLAG('MOD', 1452);
  366.  
  367.   function '**' (LEFT NUMBER, RIGHT NUMBER) return NUMBER;
  368.     pragma FIPSFLAG('**', 1452);
  369.  
  370.   function FLOOR(n NUMBER) return NUMBER;
  371.     pragma FIPSFLAG('FLOOR', 1452);
  372.   function CEIL(n NUMBER) return NUMBER;
  373.     pragma FIPSFLAG('CEIL', 1452);
  374.   function SQRT(n NUMBER) return NUMBER;
  375.     pragma FIPSFLAG('SQRT', 1452);
  376.   function SIGN(n NUMBER) return SIGNTYPE;
  377.     pragma FIPSFLAG('SIGN', 1452);
  378.  
  379.   function COS(N NUMBER) return NUMBER;
  380.   function SIN(N NUMBER) return NUMBER;
  381.   function TAN(N NUMBER) return NUMBER;
  382.   function COSH(N NUMBER) return NUMBER;
  383.   function SINH(N NUMBER) return NUMBER;
  384.   function TANH(N NUMBER) return NUMBER;
  385.   function EXP(N NUMBER) return NUMBER;
  386.   function LN(N NUMBER) return NUMBER;
  387.  
  388.   function BITAND (LEFT binary_integer, RIGHT binary_integer)  
  389.     return binary_integer; 
  390.   function LOG (LEFT NUMBER, RIGHT NUMBER) return NUMBER;
  391.  
  392.   function TRUNC (n NUMBER, places binary_integer := 0) return NUMBER;
  393.     pragma FIPSFLAG('TRUNC', 1452);
  394.  
  395.   function ROUND (LEFT NUMBER, RIGHT binary_integer := 0) return NUMBER;
  396.     pragma FIPSFLAG('ROUND', 1452);
  397.  
  398.   function POWER (n NUMBER, e NUMBER) return NUMBER;
  399.     pragma FIPSFLAG('POWER', 1452);
  400.  
  401. --****************************************************************
  402.  
  403.   function '='  (LEFT DATE, RIGHT DATE) return BOOLEAN;
  404.     pragma BUILTIN('=',2, 12, 1); -- PEMS_DATE, PEMDCMEQ
  405.     pragma FIPSFLAG('=', 1450);
  406.   function '!=' (LEFT DATE, RIGHT DATE) return BOOLEAN;  -- also <> and ~=
  407.     pragma BUILTIN('!=',5, 12, 2); -- PEMS_DATE, PEMDCMNE
  408.     pragma FIPSFLAG('!=', 1450);
  409.   function '<'  (LEFT DATE, RIGHT DATE) return BOOLEAN;
  410.     pragma BUILTIN('<',4, 12, 3); -- PEMS_DATE, PEMDCMLT
  411.     pragma FIPSFLAG('<', 1450);
  412.   function '<=' (LEFT DATE, RIGHT DATE) return BOOLEAN;
  413.     pragma BUILTIN('<=',6, 12, 4); -- PEMS_DATE, PEMDCMLE
  414.     pragma FIPSFLAG('<=', 1450);
  415.   function '>'  (LEFT DATE, RIGHT DATE) return BOOLEAN;
  416.     pragma BUILTIN('>',1, 12, 5);  -- PEMS_DATE, PEMDCMGT
  417.     pragma FIPSFLAG('>', 1450);
  418.   function '>=' (LEFT DATE, RIGHT DATE) return BOOLEAN;
  419.     pragma BUILTIN('>=',3, 12, 6);  -- PEMS_DATE, PEMDCMGE
  420.     pragma FIPSFLAG('>=', 1450);
  421.  
  422.   function '+' (LEFT DATE, RIGHT NUMBER) return DATE;
  423.     pragma BUILTIN('+',14, 12, 7); -- PEMS_DATE, DATE_ADD1
  424.     pragma FIPSFLAG('+', 1450);
  425.   function '+' (LEFT NUMBER, RIGHT DATE) return DATE;
  426.     pragma BUILTIN('+',14, 12, 8); -- PEMS_DATE, DATE_ADD2
  427.     pragma FIPSFLAG('+', 1450);
  428.   function '-' (LEFT DATE, RIGHT NUMBER) return DATE;
  429.     pragma BUILTIN('-',15, 12, 9); -- PEMS_DATE, DATE_SUB1
  430.     pragma FIPSFLAG('-', 1450);
  431.   function '-' (LEFT NUMBER, RIGHT DATE) return DATE;
  432.     pragma BUILTIN('-',15, 12, 10); -- PEMS_DATE, DATE_SUB2
  433.     pragma FIPSFLAG('-', 1450);
  434.   function '-' (LEFT DATE, RIGHT DATE) return NUMBER;
  435.     pragma BUILTIN('-',15, 12, 11); -- PEMS_DATE, DATE_SUB3
  436.     pragma FIPSFLAG('-', 1450);
  437.  
  438.   function LAST_DAY(RIGHT DATE) return DATE;
  439.     pragma BUILTIN('LAST_DAY',38, 12, 12); -- PEMS_DATE, DATE_LAST_DAY
  440.     pragma FIPSFLAG('LAST_DAY', 1450);
  441.   function ADD_MONTHS(LEFT DATE, RIGHT NUMBER) return DATE;
  442.     pragma BUILTIN('ADD_MONTHS',39, 12, 13); -- PEMS_DATE, DATE_ADD_MONTHS1
  443.     pragma FIPSFLAG('ADD_MONTHS', 1450);
  444.   function ADD_MONTHS(LEFT NUMBER, RIGHT DATE) return DATE;
  445.     pragma BUILTIN('ADD_MONTHS',39, 12, 14); -- PEMS_DATE, DATE_ADD_MONTHS2
  446.     pragma FIPSFLAG('ADD_MONTHS', 1450);
  447.  
  448.   function MONTHS_BETWEEN(LEFT DATE, RIGHT DATE) return NUMBER;
  449.     pragma BUILTIN('MONTHS_BETWEEN',42, 12, 15); -- PEMS_DATE, DATE_MONTHS_BET
  450.     pragma FIPSFLAG('MONTHS_BETWEEN', 1450);
  451.   function NEXT_DAY(LEFT DATE, RIGHT VARCHAR2) return DATE;
  452.     pragma BUILTIN('NEXT_DAY',43, 12, 16); -- PEMS_DATE, DATE_NEXT_DAY
  453.     pragma FIPSFLAG('NEXT_DAY', 1450);
  454.   function ROUND(RIGHT DATE) return DATE;
  455.     pragma BUILTIN('ROUND',24, 12, 17); -- PEMS_DATE, DATE_ROUND
  456.     pragma FIPSFLAG('ROUND', 1450);
  457.   function NEW_TIME(RIGHT DATE, MIDDLE VARCHAR2, LEFT VARCHAR2) return DATE;
  458.     pragma FIPSFLAG('NEW_TIME', 1450);
  459.  
  460.   function 'IS NULL' (d DATE) return BOOLEAN;
  461.     pragma BUILTIN('IS NULL', 0, 12, 0);  -- PEMS_DATE, PEMDNUL
  462.     pragma FIPSFLAG('IS NULL', 1450);
  463.   function 'IS NOT NULL' (d DATE) return BOOLEAN;
  464.     pragma FIPSFLAG('IS NOT NULL', 1450);
  465.   function NVL (d1 DATE, d2 DATE) return DATE;
  466.     pragma FIPSFLAG('NVL', 1450);
  467.  
  468. --****************************************************************
  469.  
  470.   function TRUNC(LEFT DATE) return DATE;
  471.     pragma BUILTIN('TRUNC',51, 12, 20); -- PEMS_DATE, DATE_TRUNC1
  472.     pragma FIPSFLAG('TRUNC', 1450);
  473.   function TRUNC(LEFT DATE, RIGHT VARCHAR2) return DATE;
  474.     pragma BUILTIN('TRUNC',51, 12, 21); -- PEMS_DATE, DATE_TRUNC2
  475.     pragma FIPSFLAG('TRUNC', 1450);
  476.   function ROUND(LEFT DATE, RIGHT VARCHAR2) return DATE;
  477.     pragma BUILTIN('ROUND',24, 12, 22); -- PEMS_DATE, DATE_ROUND2
  478.     pragma FIPSFLAG('ROUND', 1450);
  479.  
  480. --****************************************************************
  481. -- basetype conversion routines
  482.  
  483.   function TO_DATE    (RIGHT VARCHAR2)     return DATE;
  484.     pragma BUILTIN('TO_DATE',40, 1, 10); -- PEMS_CHAR, CHR_CNV_DAT
  485.     pragma FIPSFLAG('TO_DATE', 1450);
  486.  
  487.   function TO_DATE (LEFT VARCHAR2, RIGHT VARCHAR2) return DATE;
  488.     pragma BUILTIN('TO_DATE',40, 1, 8); -- PEMS_CHAR, CHR_CNV_DATE
  489.     pragma FIPSFLAG('TO_DATE', 1450);
  490.  
  491.   function TO_DATE (LEFT NUMBER, RIGHT VARCHAR2) return DATE;
  492.     pragma FIPSFLAG('TO_DATE', 1450);
  493.  
  494.   function TO_DATE(left varchar2, format varchar2, parms varchar2) return date;
  495.  
  496.   function TO_CHAR (RIGHT DATE) return VARCHAR2;
  497.     pragma BUILTIN('TO_CHAR',41, 12, 23); -- PEMS_DATE, DAT_CNV_CHR2
  498.  
  499.   function TO_CHAR (LEFT DATE, RIGHT VARCHAR2) return VARCHAR2;
  500.     pragma BUILTIN('TO_CHAR',41, 12, 19); -- PEMS_DATE, DAT_CNV_CHR1
  501.     pragma FIPSFLAG('TO_CHAR', 1450);
  502.  
  503.   function TO_CHAR (LEFT NUMBER, RIGHT VARCHAR2) return VARCHAR2;
  504.     pragma BUILTIN('TO_CHAR',41, 2, 12); -- PEMS_NUMBER, NUM_CNV_CHR
  505.  
  506.   function TO_CHAR (LEFT NUMBER) return VARCHAR2;
  507.  
  508.   function TO_NUMBER (LEFT NUMBER) RETURN NUMBER;
  509.  
  510.   function TO_NUMBER (RIGHT VARCHAR2)      return NUMBER;
  511.     pragma BUILTIN('TO_NUMBER',48, 1, 9); -- PEMS_CHAR, CHR_CNV_NUM
  512.  
  513.   function TO_NUMBER(left varchar2, format varchar2)     return number;
  514.   function TO_NUMBER(left varchar2, format varchar2, parms varchar2) 
  515.     return number;
  516.  
  517. --****************************************************************
  518.  
  519.   -- Note that we really aren't returning an binary_integer.  It returns
  520.   -- whatever the POSth datatype is....  This should COG ok though...
  521.   function  GETBND(POS BINARY_INTEGER)             return BINARY_INTEGER;
  522.     pragma BUILTIN('GETBND',240,202,240);
  523.     pragma FIPSFLAG('GETBND', 1452);
  524.  
  525.   procedure SETBND(POS BINARY_INTEGER, VAL NUMBER);
  526.     pragma BUILTIN('SETBND',240,201,240);
  527.     pragma FIPSFLAG('SETBND', 1453);
  528.  
  529.  
  530. ------------ Define the Pragmas ----------------
  531. -- (most of) these don't really need the argument_id's
  532. -- in fact I think this is unneeded
  533. pragma NEWPRAGMA(interface,language,subprogram);
  534. pragma NEWPRAGMA(interface_C,subprogram,C_routine);
  535. pragma NEWPRAGMA(Environ_Call,Call_Num,Arg);
  536. pragma NEWPRAGMA(Environ_Call1,Call_Num,Arg);
  537.  
  538.  
  539. -- Define SQL predicates.  These don't gen code, so no body is needed.
  540.  
  541. -- PRIOR is WEIRD - For now, it will be treated as a function call.
  542. -- Does the function only take a column name?  how about its use in
  543. -- a predicate?
  544. function 'PRIOR'(colname VARCHAR2) return VARCHAR2;
  545.     pragma FIPSFLAG('PRIOR', 1452);
  546. function 'PRIOR'(colname NUMBER) return NUMBER;
  547.     pragma FIPSFLAG('PRIOR', 1452);
  548. function 'PRIOR'(colname DATE) return DATE;
  549.     pragma FIPSFLAG('PRIOR', 1450);
  550.  
  551. -- Outer Join has same problem as PRIOR
  552. function '(+)'(colname VARCHAR2) return VARCHAR2;
  553. function '(+)'(colname NUMBER) return NUMBER;
  554. function '(+)'(colname DATE) return DATE;
  555.     pragma FIPSFLAG('(+)', 1450);
  556.  
  557. function '=ANY'  (LEFT VARCHAR2, RIGHT VARCHAR2) return BOOLEAN;
  558. function '=ANY'  (LEFT DATE, RIGHT DATE) return BOOLEAN;
  559.     pragma FIPSFLAG('=ANY', 1450);
  560. function '=ANY'  (LEFT NUMBER, RIGHT NUMBER) return BOOLEAN;
  561.  
  562. function '!=ANY'  (LEFT VARCHAR2, RIGHT VARCHAR2) return BOOLEAN;
  563. function '!=ANY'  (LEFT DATE, RIGHT DATE) return BOOLEAN;
  564.     pragma FIPSFLAG('!=ANY', 1450);
  565. function '!=ANY'  (LEFT NUMBER, RIGHT NUMBER) return BOOLEAN;
  566.  
  567. function '<ANY'  (LEFT VARCHAR2, RIGHT VARCHAR2) return BOOLEAN;
  568. function '<ANY'  (LEFT DATE, RIGHT DATE) return BOOLEAN;
  569.     pragma FIPSFLAG('<ANY', 1450);
  570. function '<ANY'  (LEFT NUMBER, RIGHT NUMBER) return BOOLEAN;
  571.  
  572. function '<=ANY'  (LEFT VARCHAR2, RIGHT VARCHAR2) return BOOLEAN;
  573. function '<=ANY'  (LEFT DATE, RIGHT DATE) return BOOLEAN;
  574.     pragma FIPSFLAG('<=ANY', 1450);
  575. function '<=ANY'  (LEFT NUMBER, RIGHT NUMBER) return BOOLEAN;
  576.  
  577. function '>ANY'  (LEFT VARCHAR2, RIGHT VARCHAR2) return BOOLEAN;
  578. function '>ANY'  (LEFT DATE, RIGHT DATE) return BOOLEAN;
  579.     pragma FIPSFLAG('>ANY', 1450);
  580. function '>ANY'  (LEFT NUMBER, RIGHT NUMBER) return BOOLEAN;
  581.  
  582. function '>=ANY'  (LEFT VARCHAR2, RIGHT VARCHAR2) return BOOLEAN;
  583. function '>=ANY'  (LEFT DATE, RIGHT DATE) return BOOLEAN;
  584.     pragma FIPSFLAG('>=ANY', 1450);
  585. function '>=ANY'  (LEFT NUMBER, RIGHT NUMBER) return BOOLEAN;
  586.  
  587. function '=ALL'  (LEFT VARCHAR2, RIGHT VARCHAR2) return BOOLEAN;
  588. function '=ALL'  (LEFT DATE, RIGHT DATE) return BOOLEAN;
  589.     pragma FIPSFLAG('=ALL', 1450);
  590. function '=ALL'  (LEFT NUMBER, RIGHT NUMBER) return BOOLEAN;
  591.  
  592. function '!=ALL'  (LEFT VARCHAR2, RIGHT VARCHAR2) return BOOLEAN;
  593. function '!=ALL'  (LEFT DATE, RIGHT DATE) return BOOLEAN;
  594.     pragma FIPSFLAG('!=ALL', 1450);
  595. function '!=ALL'  (LEFT NUMBER, RIGHT NUMBER) return BOOLEAN;
  596.  
  597. function '<ALL'  (LEFT VARCHAR2, RIGHT VARCHAR2) return BOOLEAN;
  598. function '<ALL'  (LEFT DATE, RIGHT DATE) return BOOLEAN;
  599.     pragma FIPSFLAG('<ALL', 1450);
  600. function '<ALL'  (LEFT NUMBER, RIGHT NUMBER) return BOOLEAN;
  601.  
  602. function '<=ALL'  (LEFT VARCHAR2, RIGHT VARCHAR2) return BOOLEAN;
  603. function '<=ALL'  (LEFT DATE, RIGHT DATE) return BOOLEAN;
  604.     pragma FIPSFLAG('<=ALL', 1450);
  605. function '<=ALL'  (LEFT NUMBER, RIGHT NUMBER) return BOOLEAN;
  606.  
  607. function '>ALL'  (LEFT VARCHAR2, RIGHT VARCHAR2) return BOOLEAN;
  608. function '>ALL'  (LEFT DATE, RIGHT DATE) return BOOLEAN;
  609.     pragma FIPSFLAG('>ALL', 1450);
  610. function '>ALL'  (LEFT NUMBER, RIGHT NUMBER) return BOOLEAN;
  611.  
  612. function '>=ALL'  (LEFT VARCHAR2, RIGHT VARCHAR2) return BOOLEAN;
  613. function '>=ALL'  (LEFT DATE, RIGHT DATE) return BOOLEAN;
  614.     pragma FIPSFLAG('>=ALL', 1450);
  615. function '>=ALL'  (LEFT NUMBER, RIGHT NUMBER) return BOOLEAN;
  616.  
  617. function '=SOME'  (LEFT VARCHAR2, RIGHT VARCHAR2) return BOOLEAN;
  618. function '=SOME'  (LEFT DATE, RIGHT DATE) return BOOLEAN;
  619.     pragma FIPSFLAG('=SOME', 1450);
  620. function '=SOME'  (LEFT NUMBER, RIGHT NUMBER) return BOOLEAN;
  621.  
  622. function '!=SOME'  (LEFT VARCHAR2, RIGHT VARCHAR2) return BOOLEAN;
  623. function '!=SOME'  (LEFT DATE, RIGHT DATE) return BOOLEAN;
  624.     pragma FIPSFLAG('!=SOME', 1450);
  625. function '!=SOME'  (LEFT NUMBER, RIGHT NUMBER) return BOOLEAN;
  626.  
  627. function '<SOME'  (LEFT VARCHAR2, RIGHT VARCHAR2) return BOOLEAN;
  628. function '<SOME'  (LEFT DATE, RIGHT DATE) return BOOLEAN;
  629.     pragma FIPSFLAG('<SOME', 1450);
  630. function '<SOME'  (LEFT NUMBER, RIGHT NUMBER) return BOOLEAN;
  631.  
  632. function '<=SOME'  (LEFT VARCHAR2, RIGHT VARCHAR2) return BOOLEAN;
  633. function '<=SOME'  (LEFT DATE, RIGHT DATE) return BOOLEAN;
  634.     pragma FIPSFLAG('<=SOME', 1450);
  635. function '<=SOME'  (LEFT NUMBER, RIGHT NUMBER) return BOOLEAN;
  636.  
  637. function '>SOME'  (LEFT VARCHAR2, RIGHT VARCHAR2) return BOOLEAN;
  638. function '>SOME'  (LEFT DATE, RIGHT DATE) return BOOLEAN;
  639.     pragma FIPSFLAG('>SOME', 1450);
  640. function '>SOME'  (LEFT NUMBER, RIGHT NUMBER) return BOOLEAN;
  641.  
  642. function '>=SOME'  (LEFT VARCHAR2, RIGHT VARCHAR2) return BOOLEAN;
  643. function '>=SOME'  (LEFT DATE, RIGHT DATE) return BOOLEAN;
  644.     pragma FIPSFLAG('>=SOME', 1450);
  645. function '>=SOME'  (LEFT NUMBER, RIGHT NUMBER) return BOOLEAN;
  646.  
  647. function 'BETWEEN' (TESTVAL VARCHAR2, LOW VARCHAR2, HIGH VARCHAR2)
  648.     return BOOLEAN;
  649. function 'BETWEEN' (TESTVAL NUMBER, LOW NUMBER, HIGH NUMBER) return BOOLEAN;
  650. function 'BETWEEN' (TESTVAL BOOLEAN, LOW BOOLEAN, HIGH BOOLEAN) return BOOLEAN;
  651.     pragma FIPSFLAG('BETWEEN', 1450);
  652. function 'BETWEEN' (TESTVAL DATE, LOW DATE, HIGH DATE) return BOOLEAN;
  653.     pragma FIPSFLAG('BETWEEN', 1450);
  654.  
  655.  
  656. --    SQL Transaction routines
  657.  
  658. procedure SET_TRANSACTION_USE(vc VARCHAR2);
  659. procedure COMMIT;
  660. procedure COMMIT_CM(vc VARCHAR2);
  661. procedure ROLLBACK_NR;
  662. procedure ROLLBACK_SV(Save_Point CHAR);
  663. procedure SAVEPOINT(Save_Point CHAR);
  664.  
  665. --    Generic SQL DDL routine
  666.  
  667. --procedure SQL_DDL(Stmt VARCHAR2);
  668.  
  669.  
  670.   function SYSDATE return DATE;
  671.     pragma FIPSFLAG('SYSDATE', 1452);
  672.  
  673.   function UID return NUMBER;
  674.     pragma FIPSFLAG('UID', 1452);
  675.  
  676.   function USER return VARCHAR2;
  677.  
  678.   function USERENV (envstr VARCHAR2) return VARCHAR2;
  679.     pragma FIPSFLAG('USERENV', 1452);
  680.  
  681.  
  682.   -- ROWID: this dreadful identifier is supposed to represent a datatype
  683.   -- outside of SQL and and a pseudo-column (function, to us) when inside
  684.   -- a sql statement.  ADA data model doesn't allow for any
  685.   -- function X return X;
  686.   -- so we must special case this.  Yuk.  There's special-case code in ph2nre
  687.   -- which maps "rowid" to "rowid " if we're inside a SQL stmt.
  688.   function "ROWID " return ROWID;
  689.     pragma builtin('ROWID ', 1, 209, 240);  -- this had better never be called.
  690.  
  691.   function NULLFN (str VARCHAR2) return RAW;
  692.     pragma builtin('NULLFN', 1, 0, 1); 
  693.  
  694.   function HEXTORAW (c VARCHAR2) return RAW;
  695.      pragma builtin('HEXTORAW', 1, 23, 1);
  696.  
  697.   function RAWTOHEX (r RAW) return VARCHAR2;
  698.      pragma builtin('RAWTOHEX', 1, 23, 2);
  699.  
  700.   function CHARTOROWID (str VARCHAR2) return ROWID;
  701.     pragma builtin('CHARTOROWID', 1, 0, 1);
  702.  
  703.   function ROWIDTOCHAR (str ROWID) return VARCHAR2;
  704.     pragma builtin('ROWIDTOCHAR', 1, 0, 1);
  705.  
  706.  
  707. -- Trusted*Oracle additions
  708.  
  709.   Function ROWLABEL return MLSLABEL;               -- pseudo column
  710.  
  711.   Function TO_CHAR(label MLSLABEL) return VARCHAR2;
  712.     pragma BUILTIN('TO_CHAR',90, 4, 1); -- PEMS_CHAR, CHR_CNV_MLS
  713.  
  714.   Function TO_CHAR(label MLSLABEL, format VARCHAR2) return VARCHAR2;
  715.     pragma BUILTIN('TO_CHAR',90, 4, 19); -- PEMS_DATE, MLS_CNV_CHR1
  716.     pragma FIPSFLAG('TO_CHAR', 1450);
  717.  
  718.   Function TO_LABEL(label VARCHAR2, format VARCHAR2 ) return  MLSLABEL;
  719.     pragma BUILTIN('TO_LABEL',90, 4, 8); -- PEMS_CHAR, CHR_CNV_MLS
  720.     pragma FIPSFLAG('TO_LABEL', 1450);
  721.  
  722.   Function TO_LABEL(label VARCHAR2 ) return  MLSLABEL;
  723.     pragma BUILTIN('TO_LABEL',90, 4, 2); -- PEMS_CHAR, CHR_CNV_MLS
  724.     pragma FIPSFLAG('TO_LABEL', 1450);
  725.  
  726. -- vararg routines - icds in stdbdy 
  727.   Function LEAST_UB    (pattern MLSLABEL) return MLSLABEL;
  728.     pragma BUILTIN('LEAST_UB',90, 4, 3); -- PEMS_CHAR, CHR_CNV_MLS
  729.   Function GREATEST_LB (pattern MLSLABEL) return MLSLABEL;
  730.     pragma BUILTIN('GREATEST_LB',90, 4, 4); -- PEMS_CHAR, CHR_CNV_MLS
  731.  
  732.   Function '>=' (label1 MLSLABEL, label2 MLSLABEL) return BOOLEAN;
  733.   Function '>'  (label1 MLSLABEL, label2 MLSLABEL) return BOOLEAN;
  734.   Function '<=' (label1 MLSLABEL, label2 MLSLABEL) return BOOLEAN;
  735.   Function '<'  (label1 MLSLABEL, label2 MLSLABEL) return BOOLEAN;
  736.   Function '='  (label1 MLSLABEL, label2 MLSLABEL) return BOOLEAN;
  737.   Function '!=' (label1 MLSLABEL, label2 MLSLABEL) return BOOLEAN;
  738.   function 'IS NULL' (label MLSLABEL) return BOOLEAN;
  739.     pragma BUILTIN('IS NULL', 0, 1,20);   -- same "cod" as IS NULL(varchar2)
  740.   function 'IS NOT NULL' (label MLSLABEL) return BOOLEAN;
  741.  
  742.   function NVL(label1 MLSLABEL, label2 MLSLABEL) return MLSLABEL;
  743.     pragma FIPSFLAG('NVL', 1452);
  744.  
  745. -- group functions 
  746.   Function LUB (label MLSLABEL) return MLSLABEL;
  747.   Function GLB (label MLSLABEL) return MLSLABEL;
  748.  
  749. -- end of Trusted*Oracle additions 
  750.  
  751.  
  752. -- beginning of NLS routines 
  753.  
  754.   function NLSSORT(c VARCHAR2) return RAW;
  755.     pragma FIPSFLAG('NLSSORT', 1452);    
  756.   function NLSSORT(c VARCHAR2, c2 VARCHAR2) return RAW;
  757.     pragma FIPSFLAG('NLSSORT', 1452);    
  758.   function NLS_UPPER(ch VARCHAR2, parms varchar2) return varchar2;
  759.     pragma FIPSFLAG('NLS_UPPER', 1452);    
  760.   function NLS_UPPER(c VARCHAR2) return VARCHAR2;
  761.     pragma FIPSFLAG('NLS_UPPER', 1452);    
  762.   function NLS_LOWER(ch VARCHAR2, parms varchar2) return varchar2;
  763.     pragma FIPSFLAG('NLS_LOWER', 1452);    
  764.   function NLS_LOWER(c VARCHAR2) return VARCHAR2;
  765.     pragma FIPSFLAG('NLS_LOWER', 1452);    
  766.   function NLS_INITCAP(ch VARCHAR2, parms varchar2) return varchar2;
  767.     pragma FIPSFLAG('NLS_INITCAP', 1452);    
  768.   function NLS_INITCAP(c VARCHAR2) return VARCHAR2;
  769.     pragma FIPSFLAG('NLS_INITCAP', 1452);    
  770.  
  771.   function LENGTHB(ch VARCHAR2) return number;
  772.     pragma FIPSFLAG('LENGTHB', 1452);    
  773.   function SUBSTRB(STR1 VARCHAR2, POS binary_integer, 
  774.         LEN binary_integer := NULL)
  775.     return VARCHAR2;
  776.     pragma FIPSFLAG('SUBSTRB', 1452);    
  777.   function INSTRB(STR1 VARCHAR2, STR2 VARCHAR2, POS binary_integer := 1,
  778.                  NTH binary_integer := 1) return NUMBER;
  779.     pragma FIPSFLAG('INSTRB', 1452);    
  780.  
  781.   function TO_SINGLE_BYTE(c VARCHAR2) return VARCHAR2;
  782.     pragma FIPSFLAG('TO_SINGLE_BYTE', 1452);    
  783.   function TO_MULTI_BYTE(c VARCHAR2) return VARCHAR2;
  784.     pragma FIPSFLAG('TO_MULTI_BYTE', 1452);    
  785.  
  786.   -- Next two added for NLS 6/3/92 JEM.
  787.   function TO_CHAR(left date, format varchar2, parms varchar2) return varchar2;
  788.   function TO_CHAR(left number, format varchar2, parms varchar2) 
  789.     return varchar2;
  790.  
  791. -- end of NLS routines 
  792.  
  793. function CONVERT(src VARCHAR2, destcset VARCHAR2) return VARCHAR2;
  794. function CONVERT(src VARCHAR2, destcset VARCHAR2, srccset VARCHAR2) 
  795.     return VARCHAR2;
  796.  
  797. function VSIZE (e number ) return NUMBER;
  798.     pragma builtin('VSIZE', 1, 0, 1);
  799. function VSIZE (e DATE) return NUMBER;
  800.     pragma builtin('VSIZE', 1, 0, 1);
  801. function VSIZE (e VARCHAR2) return NUMBER;
  802.     pragma builtin('VSIZE', 1, 0, 1);
  803.  
  804.  
  805. -- dump 
  806. -- dump( expr [,display_format[,start_pos[,length]]]) return VARCHAR2
  807. function DUMP(e varchar2,df binary_integer := null,sp binary_integer := null,
  808.         len binary_integer := null) return VARCHAR2;
  809.     pragma builtin('DUMP', 1, 0, 1);
  810.  
  811. function DUMP(e number,df binary_integer := null,sp binary_integer := null,
  812.         len binary_integer := null) return VARCHAR2;
  813.     pragma builtin('DUMP', 1, 0, 1);
  814.  
  815. function DUMP(e date,df binary_integer := null,sp binary_integer := null,
  816.         len binary_integer := null) return VARCHAR2;
  817.     pragma builtin('DUMP', 1, 0, 1);
  818.  
  819.  
  820. /* exception for ref cursors  */  
  821. ROWTYPE_MISMATCH exception;
  822. pragma EXCEPTION_INIT(ROWTYPE_MISMATCH, '-6504');
  823.  
  824. end STANDARD;
  825. /
  826.  
  827. create or replace package body STANDARD is
  828.  
  829. subtype Cursor_Handle is binary_integer range 0..255;
  830.  
  831. -- icds 
  832.  
  833.   function peslen(ch VARCHAR2) return NATURAL;
  834.     pragma interface (c,peslen);
  835.   function pessub(ch VARCHAR2, pos BINARY_INTEGER, len BINARY_INTEGER) 
  836.     return varchar2;
  837.     pragma interface (c,pessub);
  838.  
  839.   function pesist(text VARCHAR2, substr VARCHAR2, 
  840.         strt BINARY_INTEGER, cnt POSITIVE)
  841.         return BINARY_INTEGER;
  842.     pragma interface (c,pesist);
  843.  
  844.   function pesupp(ch VARCHAR2) return varchar2;
  845.     pragma interface (c,pesupp);
  846.  
  847.   function peslow(ch VARCHAR2) return varchar2;
  848.     pragma interface (c,peslow);
  849.  
  850.   function peslpd(ch VARCHAR2, len BINARY_INTEGER, padchar VARCHAR2) 
  851.         return varchar2;
  852.     pragma interface (c,peslpd);
  853.  
  854.   function pesrpd(ch VARCHAR2, len BINARY_INTEGER, padchar varchar2) 
  855.         return varchar2;
  856.     pragma interface (c,pesrpd);
  857.  
  858.   function pesasc(ch VARCHAR2) return NATURAL;
  859.     pragma interface (c,pesasc);
  860.  
  861.   function peschr(n NATURAL) return varchar2;
  862.     pragma interface (c,peschr);
  863.  
  864.   function pesicp(ch VARCHAR2) return varchar2;
  865.     pragma interface (c,pesicp);
  866.  
  867.   function pesxlt(ch VARCHAR2, cpy VARCHAR2, frm VARCHAR2, too VARCHAR2) 
  868.     return varchar2;
  869.     pragma interface (c,pesxlt);
  870.  
  871.   function pesltr(ch VARCHAR2, trimset VARCHAR2) return varchar2;
  872.     pragma interface (c,pesltr);
  873.  
  874.   function pesrtr(ch VARCHAR2, trimset VARCHAR2) return varchar2;
  875.     pragma interface (c,pesrtr);
  876.  
  877.   function peslik(str varchar2, pat varchar2) return boolean;
  878.     pragma interface (c,peslik);
  879.  
  880.   function pesli2(str varchar2, pat varchar2, esc varchar2) return boolean;
  881.     pragma interface (c,pesli2);
  882.  
  883.   function pesabs(n NUMBER) return NUMBER;
  884.     pragma interface (c,pesabs);
  885.  
  886.   function pesmod(n1 NUMBER, n2 NUMBER) return NUMBER;
  887.     pragma interface (c,pesmod);
  888.  
  889.   function pesflo(n NUMBER) return NUMBER;
  890.     pragma interface (c,pesflo);
  891.  
  892.   function pescei(n NUMBER) return NUMBER;
  893.     pragma interface (c,pescei);
  894.  
  895.   function pessqt(n NUMBER) return NUMBER;
  896.     pragma interface (c,pessqt);
  897.  
  898.   function pessgn(n NUMBER) return SIGNTYPE;
  899.     pragma interface (c,pessgn);
  900.  
  901. -- trig fns 
  902.   function pescos(n number) return number;
  903.     pragma interface (c,pescos);
  904.   function pessin(n number) return number;
  905.     pragma interface (c,pessin);
  906.   function pestan(n number) return number;
  907.     pragma interface (c,pestan);
  908.   function pescsh(n number) return number;
  909.     pragma interface (c,pescsh);
  910.   function pessnh(n number) return number;
  911.     pragma interface (c,pessnh);
  912.   function pestnh(n number) return number;
  913.     pragma interface (c,pestnh);
  914.   function pesexp(n number) return number;
  915.     pragma interface (c,pesexp);
  916.   function pesln(n number) return number;
  917.     pragma interface (c,pesln);
  918.   function peslog(left number,right number) return number;
  919.     pragma interface (c,peslog);
  920.   function pesbtd(left binary_integer,right binary_integer) 
  921.     return binary_integer;
  922.     pragma interface (c,pesbtd);
  923.  
  924.   function pestru(n NUMBER, places BINARY_INTEGER) return NUMBER;
  925.     pragma interface (c,pestru);
  926.  
  927.   function pesrnd(n NUMBER, places BINARY_INTEGER) return NUMBER;
  928.     pragma interface (c,pesrnd);
  929.  
  930.   function pespow(n NUMBER, e NUMBER) return NUMBER;
  931.     pragma interface (c,pespow);
  932.  
  933.   function pesnwt(r date, m varchar2, l varchar2) return date;
  934.     pragma interface (c,pesnwt);
  935.  
  936.   function pessdt return DATE;
  937.     pragma interface (c,pessdt);
  938.  
  939.   function pesxco(c VARCHAR2, format VARCHAR2) return raw;
  940.     pragma interface (c,pesxco);
  941.  
  942.   function pesxup(ch VARCHAR2, format VARCHAR2) return varchar2;
  943.     pragma interface (c,pesxup);
  944.  
  945.   function pesxlo(ch VARCHAR2, format VARCHAR2) return varchar2;
  946.     pragma interface (c,pesxlo);
  947.  
  948.   function pesxcp(ch VARCHAR2, format VARCHAR2) return varchar2;
  949.     pragma interface (c,pesxcp);
  950.  
  951.   function pesxln(ch VARCHAR2) return NATURAL;
  952.     pragma interface (c,pesxln);
  953.  
  954.   function pesxsu(ch VARCHAR2, pos BINARY_INTEGER, len BINARY_INTEGER) 
  955.     return varchar2;
  956.     pragma interface (c,pesxsu);
  957.  
  958.   function pesxis(text VARCHAR2, substr VARCHAR2, strt BINARY_INTEGER, 
  959.     cnt POSITIVE)
  960.         return BINARY_INTEGER;
  961.     pragma interface (c,pesxis);
  962.  
  963.   function pesxsi(ch VARCHAR2) return varchar2;
  964.     pragma interface (c,pesxsi);
  965.  
  966.   function pesxmu(ch VARCHAR2) return varchar2;
  967.     pragma interface (c,pesxmu);
  968.  
  969.   function pesc2d(left varchar2, format varchar2, parms varchar2) return date;
  970.     pragma interface(c, pesc2d);
  971.  
  972.   function pesc2n(left varchar2, format varchar2, parms varchar2) 
  973.     return number;
  974.     pragma interface(c, pesc2n);
  975.  
  976.   function pesd2c(left date, format varchar2, parms varchar2) return varchar2;
  977.     pragma interface(c, pesd2c);
  978.  
  979.   function pesn2c(left number, format varchar2, parms varchar2) 
  980.     return varchar2;
  981.     pragma interface(c, pesn2c);
  982.  
  983. -- end of NLS icds
  984.  
  985. -- begin trusted icds
  986. -- Comparisons
  987.   function peszge(label1 MLSLABEL,label2 MLSLABEL) return BOOLEAN;
  988.     pragma interface (c,peszge);
  989.   function peszgt(label1 MLSLABEL,label2 MLSLABEL) return BOOLEAN;
  990.     pragma interface (c,peszgt);
  991.   function peszle(label1 MLSLABEL,label2 MLSLABEL) return BOOLEAN;
  992.     pragma interface (c,peszle);
  993.   function peszlt(label1 MLSLABEL,label2 MLSLABEL) return BOOLEAN;
  994.     pragma interface (c,peszlt);
  995.   function peszeq(label1 MLSLABEL,label2 MLSLABEL) return BOOLEAN;
  996.     pragma interface (c,peszeq);
  997.   function peszne(label1 MLSLABEL,label2 MLSLABEL) return BOOLEAN;
  998.     pragma interface (c,peszne);
  999. -- Conversions
  1000. --  function peslts(label MLSLABEL,format VARCHAR2) return VARCHAR2;
  1001. --    pragma interface (c,peslts);
  1002. --  function pesstl(label varchar2,format VARCHAR2) return MLSLABEL;
  1003. --    pragma interface (c,pesstl);
  1004. -- end trusted icds
  1005. -----------------------------------------------------------
  1006.  
  1007.   function 'IS NOT NULL'(b BOOLEAN) return BOOLEAN is
  1008.   begin
  1009.     return (NOT b IS NULL);
  1010.   end 'IS NOT NULL';
  1011.  
  1012.   function NVL (b1 BOOLEAN, b2 BOOLEAN) return BOOLEAN is
  1013.   begin
  1014.     if (b1 IS NULL) then return (b2); else return(b1); end if;
  1015.   end NVL;
  1016.  
  1017.   function sqlerrm return varchar2 is
  1018.     n1 number;
  1019.   begin
  1020.     n1 := sqlcode;
  1021.     return sqlerrm(n1);
  1022.   end sqlerrm;
  1023.  
  1024.   function length (ch varchar2) return natural is
  1025.   begin
  1026.     return peslen(ch);
  1027.   end length;
  1028.  
  1029.   function SUBSTR(STR1 VARCHAR2, POS BINARY_INTEGER, 
  1030.             LEN BINARY_INTEGER := NULL) 
  1031.     return varchar2 is
  1032.   begin
  1033.     return pessub(STR1, POS, LEN);
  1034.   end SUBSTR;
  1035.  
  1036.   function INSTR(STR1 VARCHAR2, STR2 VARCHAR2, POS BINARY_INTEGER := 1,
  1037.                  NTH POSITIVE := 1) return BINARY_INTEGER is
  1038.   begin
  1039.     return pesist(STR1, STR2, POS, NTH);
  1040.   end INSTR;
  1041.  
  1042.   function UPPER(ch VARCHAR2) return varchar2 is
  1043.   begin
  1044.     return pesupp(ch);
  1045.   end UPPER;
  1046.  
  1047.   function LOWER(ch VARCHAR2) return varchar2 is
  1048.   begin
  1049.     return peslow(ch);
  1050.   end LOWER;
  1051.  
  1052.   function ASCII(ch VARCHAR2) return BINARY_INTEGER is
  1053.   begin
  1054.     return pesasc(ch);
  1055.   end ASCII;
  1056.  
  1057.   function CHR(n BINARY_INTEGER) return varchar2 is
  1058.   begin
  1059.     return peschr(n);
  1060.   end CHR;
  1061.  
  1062.   function INITCAP(ch VARCHAR2) return varchar2 is
  1063.   begin
  1064.     return pesicp(ch);
  1065.   end INITCAP;
  1066.  
  1067.   function SOUNDEX(ch VARCHAR2) return varchar2 is
  1068.     c varchar2(2000);
  1069.   begin
  1070.   --return pessdx(ch);
  1071.     select soundex(ch) into c from sys.dual;
  1072.     return c;
  1073.   end SOUNDEX;
  1074.  
  1075. --
  1076. -- This was previously called from LPAD and RPAD. But they now call pes{lr}pd.
  1077. -- 10/14/92 JEM.
  1078. --
  1079. --  function l_r_pad(STR1 VARCHAR2, LEN BINARY_INTEGER, 
  1080. --            PAD VARCHAR2, LEFT BOOLEAN)
  1081. --     return VARCHAR2 is
  1082. --  str1len binary_integer; padlen binary_integer; 
  1083. --  newlen binary_integer; newstr varchar2(32767); len2 binary_integer;
  1084. --  begin
  1085. --    len2 := len;
  1086. --    if str1 IS NULL) or (len2 IS NULL) or (pad IS NULL)
  1087. --      then return(''); end if;
  1088. --    str1len := length(str1);
  1089. --    if (str1len >= len2) then return(substr(str1, 1, len2)); end if;
  1090. --    padlen := length(pad);
  1091. --    newstr := '';
  1092. --    newlen := 0;
  1093. --    len2 := len2 - str1len;
  1094. --    while newlen < len2 loop
  1095. --      newstr := pad || newstr; newlen := newlen + padlen;
  1096. --    end loop;
  1097. --    if left then return(substr(newstr, 1, len2) || str1);
  1098. --        else return(str1 || substr(newstr, 1, len2)); end if;
  1099. --  end l_r_pad;
  1100.  
  1101.   function LPAD(STR1 VARCHAR2, LEN binary_integer, 
  1102.         PAD VARCHAR2 := ' ') return VARCHAR2 is
  1103.   begin
  1104.     return peslpd(STR1, LEN, PAD);
  1105. --    return(l_r_pad(str1, len, pad, true));    replaced 10/14/92 JEM.
  1106.   end LPAD;
  1107.  
  1108.   function RPAD(STR1 VARCHAR2, LEN binary_integer,
  1109.             PAD VARCHAR2 := ' ') return VARCHAR2 is 
  1110.   begin 
  1111.     return pesrpd(STR1, LEN, PAD);
  1112. --    return(l_r_pad(str1, len, pad, false));   replaced 10/14/92 JEM.
  1113.   end RPAD;
  1114.  
  1115.   function TRANSLATE(STR1 VARCHAR2, SRC VARCHAR2, DEST VARCHAR2) 
  1116.     return varchar2 is
  1117.   begin
  1118.     if str1 is null then return str1; else
  1119.     -- The substr and concat in arg list to pesxlt is done to
  1120.     -- allocate a modifiable COPY of the first arg, STR1. This
  1121.     -- operation is a complete cheat, because we pass the copy
  1122.     -- as an IN parm, and modify it on the sly.  
  1123.     return pesxlt(STR1, substr(str1,1,1) || substr(str1,2),
  1124.                SRC, DEST);
  1125.     end if;
  1126.   end TRANSLATE;
  1127.  
  1128.   function REPLACE(SRCSTR VARCHAR2, OLDSUB VARCHAR2,
  1129.             NEWSUB VARCHAR2 := '') RETURN VARCHAR2 
  1130.   is
  1131.   brk binary_integer;
  1132.   begin
  1133.     if srcstr is null then return '';
  1134.     else
  1135.     brk := instr(srcstr, oldsub);
  1136.     if brk > 0
  1137.     then
  1138.       return(substr(srcstr, 1, brk - 1) || newsub 
  1139.          || replace(substr(srcstr, 
  1140.                     brk + length(oldsub)),
  1141.                 oldsub, newsub));
  1142.     else return srcstr; 
  1143.     end if;
  1144.     end if;
  1145.   end;
  1146.  
  1147.   function LTRIM(STR1 VARCHAR2 := ' ',
  1148.          TSET VARCHAR2 := ' ') return varchar2 is
  1149.   begin
  1150.     return pesltr(STR1, TSET);
  1151.   end LTRIM;
  1152.  
  1153.   function RTRIM(STR1 VARCHAR2 := ' ',
  1154.          TSET VARCHAR2 := ' ') return varchar2 is
  1155.   begin
  1156.     return pesrtr(STR1, TSET);
  1157.   end RTRIM; 
  1158.  
  1159.   -- might we want to combine peslik and pesli2? 
  1160.   function 'LIKE' (str varchar2, pat varchar2) return boolean is
  1161.   begin
  1162.     return peslik(str, pat);
  1163.   end;
  1164.   function 'NOT_LIKE' (str varchar2, pat varchar2) return boolean is
  1165.   begin
  1166.     return (not peslik(str, pat));
  1167.   end;
  1168.   function 'LIKE' (str varchar2, pat varchar2, esc varchar2) return boolean is
  1169.   begin
  1170.     return pesli2(str, pat, esc);
  1171.   end;
  1172.   function 'NOT_LIKE' (str varchar2, pat varchar2, esc varchar2) return boolean is
  1173.   begin
  1174.     return (not pesli2(str, pat, esc));
  1175.   end;
  1176.  
  1177.   function 'IS NOT NULL'(s VARCHAR2) return BOOLEAN is
  1178.   begin
  1179.     return (NOT (s IS NULL));
  1180.   end 'IS NOT NULL';
  1181.  
  1182.   function NVL (s1 VARCHAR2, s2 VARCHAR2) return varchar2 is
  1183.   begin
  1184.     if (s1 IS NULL) then return (s2); else return (s1); end if;
  1185.   end NVL;
  1186.  
  1187.   function 'IS NOT NULL'(n NUMBER) return BOOLEAN is
  1188.   begin
  1189.     return (NOT (n IS NULL));
  1190.   end 'IS NOT NULL';
  1191.  
  1192.   function NVL (n1 NUMBER, n2 NUMBER) return NUMBER is
  1193.   begin
  1194.     if (n1 IS NULL) then return (n2); else return(n1); end if;
  1195.   end NVL;
  1196.  
  1197.   function ABS(n NUMBER) return NUMBER is
  1198.   begin
  1199.     return pesabs(n);
  1200.   end ABS;
  1201.  
  1202.   function 'REM' (LEFT NUMBER, RIGHT NUMBER) return NUMBER is
  1203.   begin
  1204.     return (LEFT - (trunc(LEFT / RIGHT) * RIGHT));
  1205.   end;
  1206.  
  1207.   function 'MOD'(n1 NUMBER, n2 NUMBER) return NUMBER is
  1208.   begin
  1209.   --return (n1 - ((floor(n1/n2)) * n2));  
  1210.     return pesmod(n1,n2);
  1211.   end;
  1212.  
  1213.   function '**' (LEFT NUMBER, RIGHT NUMBER) return NUMBER is
  1214.   begin
  1215.     return (POWER(LEFT, RIGHT));
  1216.   end;
  1217.  
  1218.   function FLOOR(n NUMBER) return NUMBER is
  1219.   begin
  1220.     return pesflo(n);
  1221.   end FLOOR;
  1222.  
  1223.   function CEIL(n NUMBER) return NUMBER is
  1224.   begin
  1225.     return pescei(n);
  1226.   end CEIL;
  1227.  
  1228.   function SQRT(n NUMBER) return NUMBER is
  1229.   begin
  1230.     if (0.0 > n) then raise VALUE_ERROR; end if;
  1231.     return pessqt(n);
  1232.   end SQRT;
  1233.  
  1234.   function SIGN(n NUMBER) return SIGNTYPE is
  1235.   begin
  1236.     return pessgn(n);
  1237.   end SIGN;
  1238.  
  1239.  
  1240.   function COS(N NUMBER) return NUMBER IS
  1241.    begin return(pescos(n)); end;
  1242.   function SIN(N NUMBER) return NUMBER IS
  1243.    begin return(pessin(n)); end;
  1244.   function TAN(N NUMBER) return NUMBER IS
  1245.    begin return(pestan(n)); end;
  1246.   function COSH(N NUMBER) return NUMBER IS
  1247.    begin return(pescsh(n)); end;
  1248.   function SINH(N NUMBER) return NUMBER IS
  1249.    begin return(pessnh(n)); end;
  1250.   function TANH(N NUMBER) return NUMBER IS
  1251.    begin return(pestnh(n)); end;
  1252.   function EXP(N NUMBER) return NUMBER IS
  1253.    begin return(pesexp(n)); end;
  1254.   function LN(N NUMBER) return NUMBER IS
  1255.    begin return(pesln(n)); end;
  1256.   function LOG(LEFT NUMBER, RIGHT NUMBER) return NUMBER IS
  1257.     begin return(peslog(left,right)); end;
  1258.   function BITAND(LEFT binary_integer, RIGHT binary_integer) 
  1259.     return binary_integer IS        
  1260.     begin return(pesbtd(left,right)); END;
  1261.  
  1262.   function TRUNC(n NUMBER, places BINARY_INTEGER := 0) return NUMBER is
  1263.   begin
  1264.     return pestru(n, places);
  1265.   end TRUNC;
  1266.  
  1267.   function ROUND(LEFT NUMBER, RIGHT BINARY_INTEGER := 0) return NUMBER is
  1268.   begin
  1269.     return pesrnd(LEFT, RIGHT);
  1270.   end ROUND;
  1271.  
  1272.   function POWER(n NUMBER, e NUMBER) return NUMBER is
  1273.   begin
  1274.     return pespow(n, e);
  1275.   end POWER;
  1276.  
  1277.   function NEW_TIME(right DATE, middle VARCHAR2, left VARCHAR2) return DATE is
  1278.   begin
  1279.     return pesnwt(right, middle, left);
  1280.   end;
  1281.  
  1282.   function 'IS NOT NULL'(d DATE) return BOOLEAN is
  1283.   begin
  1284.     return(NOT (d IS NULL));
  1285.   end 'IS NOT NULL';
  1286.  
  1287.   function NVL (d1 DATE, d2 DATE) return DATE is
  1288.   begin
  1289.     if (d1 IS NULL) then return(d2); else return(d1); end if;
  1290.   end NVL;
  1291.  
  1292. -- Just call the other to_char with a null format string. 
  1293. -- Perhaps this can be done more intelligently in the future. JEM 3/14/90.
  1294.   function TO_CHAR(LEFT NUMBER)     return varchar2 is
  1295.   begin
  1296.     return TO_CHAR(LEFT, '');
  1297.   end TO_CHAR;
  1298.  
  1299. -- Added 3/16/90 by JEM.
  1300.  function TO_NUMBER(LEFT NUMBER) return NUMBER is
  1301.  begin
  1302.    return(LEFT);
  1303.  end to_number;
  1304.  
  1305. function TO_DATE(LEFT NUMBER, RIGHT VARCHAR2) return DATE IS
  1306. begin
  1307.   return (TO_DATE(TO_char(LEFT), RIGHT));
  1308. end TO_DATE;
  1309.  
  1310. --    SQL 'PSD' routines
  1311.  
  1312. Procedure plzopn(cnum OUT Cursor_Handle, rc OUT Binary_Integer);
  1313.     pragma interface (c,plzopn);
  1314. Function plzosq(cnum Cursor_Handle, stmt VARCHAR2) return Binary_Integer;
  1315.     pragma interface (c,plzosq);
  1316. Function plzexe(cnum Cursor_Handle,chp Binary_Integer,nbnds Binary_Integer) 
  1317.     return Binary_Integer;
  1318.     pragma interface (c,plzexe);
  1319. Function plzexe(cnum Cursor_Handle) return Binary_Integer is
  1320. Begin
  1321.   return(plzexe(cnum,0,0));
  1322. End;
  1323. Function plzcls(cnum Cursor_Handle) return Binary_Integer;
  1324.     pragma interface (c,plzcls);
  1325.  
  1326. --    Generic SQL DDL routine
  1327.  
  1328. procedure SQL_DDL(Stmt VARCHAR2) is
  1329.   rc Binary_Integer;
  1330.   cnum Cursor_Handle;
  1331.   DDL_ERROR exception;
  1332. Begin
  1333.   plzopn(cnum,rc);
  1334.   if ( rc IS NOT NULL ) then
  1335.     RAISE DDL_ERROR;
  1336.   end if;
  1337.   rc := plzosq(cnum,Stmt);
  1338.   if ( rc IS NOT NULL ) then
  1339.     RAISE DDL_ERROR;
  1340.   end if;
  1341.   rc := plzexe(cnum);
  1342.   if ( rc IS NOT NULL ) then
  1343.     RAISE DDL_ERROR;
  1344.   end if;
  1345.   rc := plzcls(cnum);
  1346.   if ( rc IS NOT NULL ) then
  1347.     RAISE DDL_ERROR;
  1348.   end if;
  1349. End;
  1350.  
  1351. --    SQL Transaction routines
  1352.  
  1353. procedure SET_TRANSACTION_USE (vc varchar2) is
  1354. Begin
  1355.   SQL_DDL('SET TRANSACTION USE ROLLBACK SEGMENT ' || vc);
  1356. End;
  1357.  
  1358. procedure COMMIT is
  1359. Begin
  1360.   SQL_DDL('COMMIT');
  1361. End;
  1362.  
  1363. procedure COMMIT_CM (vc varchar2) is
  1364. Begin
  1365.   SQL_DDL('COMMIT work comment ' || '''' || vc || '''');
  1366. End;
  1367.  
  1368. procedure ROLLBACK_NR is
  1369. Begin
  1370.   SQL_DDL('ROLLBACK');
  1371. End;
  1372.  
  1373. procedure ROLLBACK_SV(Save_Point CHAR) is
  1374. Begin
  1375.   SQL_DDL('ROLLBACK TO ' || Save_Point);
  1376. End;
  1377.  
  1378. procedure SAVEPOINT(Save_Point CHAR) is
  1379. begin
  1380.   SQL_DDL('SAVEPOINT ' || Save_Point);
  1381. end;
  1382.  
  1383.   function SYSDATE return DATE is begin return pessdt; end;
  1384.  
  1385.   function UID return NUMBER is
  1386.   n number;
  1387.   begin
  1388.     select uid into n from sys.dual;
  1389.     return n;
  1390.   end;
  1391.  
  1392.   function USER return varchar2 is
  1393.   c varchar2(255);
  1394.   begin
  1395.     select user into c from sys.dual;
  1396.     return c;
  1397.   end;
  1398.  
  1399.   function USERENV (envstr VARCHAR2) return varchar2 is
  1400.   c varchar2(255);
  1401.   begin
  1402.     c := upper(envstr);
  1403.     if c is null then 
  1404.     null;
  1405.     elsif c = 'TERMINAL' then
  1406.     select userenv('TERMINAL') into c from sys.dual;
  1407.     elsif c = 'ENTRYID' then
  1408.     select userenv('ENTRYID') into c from sys.dual;
  1409.     elsif c = 'SESSIONID' then
  1410.     select userenv('SESSIONID') into c from sys.dual;
  1411.     elsif c = 'LANGUAGE' then
  1412.     select userenv('LANGUAGE') into c from sys.dual;
  1413.     elsif c = 'LABEL' then
  1414.     select userenv('LABEL') into c from sys.dual;
  1415.     else raise VALUE_ERROR;
  1416.     end if;
  1417.     return c;
  1418.   end;
  1419.  
  1420. -- Trusted*Oracle additions 
  1421.  
  1422.   Function ROWLABEL return MLSLABEL is
  1423.         begin return null; end;
  1424. -- removed - now builtin's
  1425. /*
  1426.   Function TO_CHAR(label MLSLABEL, format varchar2 := '')
  1427.      return VARCHAR2 is
  1428.     begin return peslts(label,format); end;
  1429.  
  1430.   Function TO_LABEL(label varchar2, format varchar2 := '')
  1431.      return MLSLABEL is
  1432.     begin return pesstl(label,format); end;
  1433. */
  1434. -- Comparison functions 
  1435.   Function '>=' (label1 MLSLABEL, label2 MLSLABEL) return BOOLEAN is
  1436.     begin return peszge(label1,label2); end;
  1437.   Function '>'  (label1 MLSLABEL, label2 MLSLABEL) return BOOLEAN is
  1438.     begin return peszgt(label1,label2); end;
  1439.   Function '<=' (label1 MLSLABEL, label2 MLSLABEL) return BOOLEAN is
  1440.     begin return peszle(label1,label2); end;
  1441.   Function '<'  (label1 MLSLABEL, label2 MLSLABEL) return BOOLEAN is
  1442.     begin return peszlt(label1,label2); end;
  1443.   Function '='  (label1 MLSLABEL, label2 MLSLABEL) return BOOLEAN is
  1444.     begin return peszeq(label1,label2); end;
  1445.   Function '!=' (label1 MLSLABEL, label2 MLSLABEL) return BOOLEAN is
  1446.     begin return peszne(label1,label2); end;
  1447.  
  1448.   function 'IS NOT NULL'(label MLSLABEL) return BOOLEAN is
  1449.   begin
  1450.     return (NOT (label IS NULL));
  1451.   end 'IS NOT NULL';
  1452.  
  1453.   function NVL (label1 MLSLABEL, label2 MLSLABEL) return MLSLABEL is
  1454.   begin
  1455.     if (label1 IS NULL) then return (label2); else return (label1); end if;
  1456.   end NVL;
  1457.  
  1458. -- group functions 
  1459.   Function LUB (label MLSLABEL) return MLSLABEL is
  1460.     begin return null; end;
  1461.   Function GLB (label MLSLABEL) return MLSLABEL is
  1462.     begin return null; end;
  1463.  
  1464. -- end of Trusted*Oracle additions 
  1465.  
  1466.     
  1467. -- beginning of NLS routines 
  1468. -- replaced with new versions 6/3/92 JEM 
  1469.  
  1470.   function NLSSORT(c VARCHAR2, c2 varchar2) return raw is
  1471.   begin
  1472.     return pesxco(c, c2);
  1473.   end NLSSORT;
  1474.  
  1475.   function NLSSORT(c VARCHAR2) return raw is
  1476.   begin
  1477.     return pesxco(c,'');
  1478.   end NLSSORT;
  1479.  
  1480.   function NLS_UPPER(ch VARCHAR2, parms varchar2) return varchar2 is
  1481.   begin
  1482.     return pesxup(ch,parms);
  1483.   end NLS_UPPER;
  1484.  
  1485.   function NLS_UPPER(c VARCHAR2) return varchar2 is
  1486.   begin
  1487.     return pesxup(c,'');
  1488.   end NLS_UPPER;
  1489.  
  1490.   function NLS_LOWER(ch VARCHAR2, parms varchar2) return varchar2 is
  1491.   begin
  1492.     return pesxlo(ch,parms);
  1493.   end NLS_LOWER;
  1494.  
  1495.   function NLS_LOWER(c VARCHAR2) return varchar2 is
  1496.   begin
  1497.     return pesxlo(c,'');
  1498.   end NLS_LOWER;
  1499.  
  1500.   function NLS_INITCAP(ch VARCHAR2, parms varchar2) return varchar2 is
  1501.   begin
  1502.     return pesxcp(ch,parms);
  1503.   end NLS_INITCAP;
  1504.  
  1505.   function NLS_INITCAP(c VARCHAR2) return varchar2 is
  1506.   begin
  1507.     return pesxcp(c,'');
  1508.   end NLS_INITCAP;
  1509.  
  1510.   function LENGTHB(ch VARCHAR2) return NUMBER is
  1511.   begin
  1512.     return TO_NUMBER(pesxln(ch));
  1513.   end LENGTHB;
  1514.  
  1515.   function SUBSTRB(STR1 VARCHAR2, POS binary_integer, 
  1516.             LEN binary_integer := NULL) 
  1517.     return varchar2 is
  1518.   begin
  1519.     return pesxsu(str1, pos, len);
  1520.   end SUBSTRB;
  1521.  
  1522.   function INSTRB(STR1 VARCHAR2, STR2 VARCHAR2, POS binary_integer := 1,
  1523.                  NTH binary_integer := 1) return NUMBER is
  1524.   begin
  1525.     return pesxis(STR1, STR2, pos, nth);
  1526.   end INSTRB;
  1527.  
  1528.   function TO_SINGLE_BYTE(c VARCHAR2) return varchar2 is
  1529.   begin
  1530.     return pesxsi(c);
  1531.   end TO_SINGLE_BYTE;
  1532.  
  1533.   function TO_MULTI_BYTE(c VARCHAR2) return varchar2 is
  1534.   begin
  1535.     return pesxmu(c);
  1536.   end TO_MULTI_BYTE;
  1537.  
  1538.   function TO_DATE(left varchar2, format varchar2, parms varchar2) 
  1539.           return date is
  1540.   begin
  1541.     return pesc2d(left, format, parms);
  1542.   end TO_DATE;
  1543.  
  1544.   function TO_NUMBER(left varchar2, format varchar2) return number is
  1545.   begin
  1546.     return pesc2n(left, format, '');
  1547.   end TO_NUMBER;
  1548.  
  1549.   function TO_NUMBER(left varchar2, format varchar2, parms varchar2) 
  1550.     return number is
  1551.   begin
  1552.     return pesc2n(left, format, parms);
  1553.   end TO_NUMBER;
  1554.  
  1555.   function TO_CHAR(left date, format varchar2, parms varchar2) 
  1556.          return varchar2 is
  1557.   begin
  1558.     return pesd2c(left, format, parms);
  1559.   end TO_CHAR;
  1560.  
  1561.   function TO_CHAR(left number, format varchar2, parms varchar2) 
  1562.     return varchar2 is
  1563.   begin
  1564.     return pesn2c(left, format, parms);
  1565.   end TO_CHAR;
  1566.  
  1567. -- end of NLS routines 
  1568.  
  1569.  
  1570. function CONVERT(src varchar2, destcset varchar2) return varchar2
  1571. is
  1572.   v varchar2(2000);
  1573.   begin
  1574.   select convert(src,destcset) into v from sys.dual;
  1575.   return v;
  1576. end;
  1577.  
  1578. function CONVERT(src varchar2, destcset varchar2,srccset varchar2) return varchar2
  1579. is
  1580.   v varchar2(2000);
  1581.   begin
  1582.   select convert(src,destcset,srccset) into v from sys.dual;
  1583.   return v;
  1584. end;
  1585.  
  1586. -- DUMP and VSIZE are now not allowed in non-sql plsql, has code to forbid 
  1587. -- it there, and is defined as a builtin in stdspc. The body will not be 
  1588. -- called in plsql.
  1589. --- CMB
  1590. ----
  1591. -- dump 
  1592. -- dump( expr [,display_format[,start_pos[,length]]]) return varchar2
  1593. -- how large should the plsql varchar2 string be 
  1594. --
  1595.  
  1596. -- why do we need these dummy bodies for LEVEL and ROWNUM?
  1597.  
  1598.   function LEVEL return NUMBER is
  1599.     begin return 0.0; end;
  1600.  
  1601.   function ROWNUM return NUMBER is
  1602.     begin return 0.0; end;
  1603.   
  1604. end STANDARD;
  1605. /
  1606.