Oracle DBMS_ASH
Version 21c

General Information
Library Note Morgan's Library Page Header
Which has the higher priority in your organization: Deploying a new database or securing the ones you already have? Looking for a website, and resources, dedicated solely to securing Oracle databases? Check out DBSecWorx.
Purpose Active Session History
AUTHID CURRENT_USER
Dependencies
DBMS_ASSERT DUAL  V_$SQLCOMMAND
DBMS_LOB PLITBLM XMLTYPE
DBMS_OUTPUT PRVTEMX_DBHOME XQSEQUENCE
DBMS_STANDARD PRVT_ASH_OMX  
Documented No
First Available 12.2
Security Model Owned by SYS with EXECUTE granted to PUBLIC

And PUBLIC needs access to active session history reason why?

Minimum privileges note to Oracle: Only a DBA or a Developer in a pre-production environment has any business looking at ASH data.
Source {ORACLE_HOME}/rdbms/admin/prvsash.plb
Subprograms
 
FETCH_OBJ_NAME (new 21c)
Undocumented dbms_ash.fetch_obj_name_awr(
p_obj_id     IN NUMBER,
p_dbid       IN NUMBER,
p_con_dbid   IN NUMBER,
p_is_local   IN VARCHAR2,
p_local_type IN VARCHAR2,
p_is_old     IN VARCHAR2,
p_time_limit IN VARCHAR2)
RETURN XMLTYPE;
TBD
 
FETCH_PROCEDURE_NAME
Undocumented dbms_ash.fetch_procedure_name(
p_obj_id     IN NUMBER,
p_subobj_id  IN NUMBER,
p_con_dbid   IN NUMBER,
p_time_limit IN VARCHAR2)
RETURN VARCHAR2;
TBD
 
FETCH_SQLTEXT (new 21c)
Undocumented dbms_ash.fetch_sqltext_awr(
p_sqlid      IN VARCHAR2,
p_dbid       IN NUMBER,
p_con_dbid   IN NUMBER,
p_is_local   IN VARCHAR2,
p_is_pdb     IN VARCHAR2,
p_is_old     IN VARCHAR2,
p_time_limit IN VARCHAR2)
RETURN XMLTYPE;
TBD
 
FETCH_USER_NAME
Undocumented dbms_ash.fetch_user_name(
p_user_id    IN NUMBER,
p_con_dbid   IN NUMBER,
p_time_limit IN VARCHAR2)
RETURN VARCHAR2;
TBD
 
GETAWRINFO
Returns snapshot information formatted as XML

Manually formatted for clarity
dbms_ash.get_awr_info(
p_dbid           IN NUMBER,
p_begin_time_utc IN VARCHAR2,
p_end_time_utc   IN VARCHAR2,
p_inst_num       IN NUMBER)
RETURN XMLTYPE;
SELECT dbid
FROM v$database;

      DBID
----------
2140826538


SELECT dbms_ash.getawrinfo(2140826538, '01272021', '01282021', 1)
FROM dual;

DBMS_ASH.GETAWRINFO(2140826538,'01272021','01282021',1)
-----------------------------------------------------------------------------------
<report>
  <report_parameters>
    <type>awr_info</type>
    <dbid>2140826538</dbid>
    <begin_time_utc>01272021</begin_time_utc>
    <end_time_utc>01282021</end_time_utc>
    <instance_number>1</instance_number>
  </report_parameters>
  <awr_snaps>
    <snap snap_id="1111" snap_time="01/27/2021 00:58:26" cnt_inst="1" task_id="1132" owner="SYS" task_name="ADDM:2140826538_1_1111" fdg_count="0"></snap>
    <snap snap_id="1112" snap_time="01/27/2021 01:58:29" cnt_inst="1" task_id="1133" owner="SYS" task_name="ADDM:2140826538_1_1112" fdg_count="0"></snap>
    <snap snap_id="1113" snap_time="01/27/2021 02:58:33" cnt_inst="1" task_id="1134" owner="SYS" task_name="ADDM:2140826538_1_1113" fdg_count="0"></snap>
    <snap snap_id="1114" snap_time="01/27/2021 03:58:36" cnt_inst="1" task_id="1135" owner="SYS" task_name="ADDM:2140826538_1_1114" fdg_count="0"></snap>
    <snap snap_id="1115" snap_time="01/27/2021 04:58:39" cnt_inst="1" task_id="1136" owner="SYS" task_name="ADDM:2140826538_1_1115" fdg_count="0"></snap>
    <snap snap_id="1116" snap_time="01/27/2021 05:58:43" cnt_inst="1" task_id="1137" owner="SYS" task_name="ADDM:2140826538_1_1116" fdg_count="0"></snap>
    <snap snap_id="1117" snap_time="01/27/2021 06:58:46" cnt_inst="1" task_id="1138" owner="SYS" task_name="ADDM:2140826538_1_1117" fdg_count="0"></snap>
    <snap snap_id="1118" snap_time="01/27/2021 07:58:49" cnt_inst="1" task_id="1139" owner="SYS" task_name="ADDM:2140826538_1_1118" fdg_count="0"></snap>
    <snap snap_id="1119" snap_time="01/27/2021 08:58:52" cnt_inst="1" task_id="1140" owner="SYS" task_name="ADDM:2140826538_1_1119" fdg_count="0"></snap>
    <snap snap_id="1120" snap_time="01/27/2021 09:58:56" cnt_inst="1" task_id="1141" owner="SYS" task_name="ADDM:2140826538_1_1120" fdg_count="0"></snap>
    <snap snap_id="1121" snap_time="01/27/2021 10:58:59" cnt_inst="1" task_id="1142" owner="SYS" task_name="ADDM:2140826538_1_1121" fdg_count="0"></snap>
    <snap snap_id="1122" snap_time="01/27/2021 11:58:02" cnt_inst="1" task_id="1143" owner="SYS" task_name="ADDM:2140826538_1_1122" fdg_count="0"></snap>
    <snap snap_id="1123" snap_time="01/27/2021 12:58:05" cnt_inst="1" task_id="1144" owner="SYS" task_name="ADDM:2140826538_1_1123" fdg_count="0"></snap>
    <snap snap_id="1124" snap_time="01/27/2021 13:58:09" cnt_inst="1" task_id="1145" owner="SYS" task_name="ADDM:2140826538_1_1124" fdg_count="0"></snap>
    <snap snap_id="1125" snap_time="01/27/2021 14:58:12" cnt_inst="1" task_id="1146" owner="SYS" task_name="ADDM:2140826538_1_1125" fdg_count="0"></snap>
    <snap snap_id="1126" snap_time="01/27/2021 15:58:15" cnt_inst="1" task_id="1147"
owner="SYS" task_name="ADDM:2140826538_1_1126" fdg_count="0"></snap>
    <snap snap_id="1127" snap_time="01/27/2021 16:58:18" cnt_inst="1" task_id="1148" owner="SYS" task_name="ADDM:2140826538_1_1127" fdg_count="0"></snap>
    <snap snap_id="1128" snap_time="01/27/2021 17:58:22" cnt_inst="1" task_id="1149" owner="SYS" task_name="ADDM:2140826538_1_1128" fdg_count="0"></snap>
    <snap snap_id="1129" snap_time="01/27/2021 18:58:25" cnt_inst="1" task_id="1150" owner="SYS" task_name="ADDM:2140826538_1_1129" fdg_count="0"></snap>
    <snap snap_id="1130" snap_time="01/27/2021 19:58:29" cnt_inst="1" task_id="1151" owner="SYS" task_name="ADDM:2140826538_1_1130" fdg_count="0"></snap>
    <snap snap_id="1131" snap_time="01/27/2021 20:58:32" cnt_inst="1" task_id="1152" owner="SYS" task_name="ADDM:2140826538_1_1131" fdg_count="0"></snap>
    <snap snap_id="1132" snap_time="01/27/2021 21:58:36" cnt_inst="1" task_id="1153"
owner="SYS" task_name="ADDM:2140826538_1_1132" fdg_count="0"></snap>
    <snap snap_id="1133" snap_time="01/27/2021 22:58:40" cnt_inst="1" task_id="1154" owner="SYS" task_name="ADDM:2140826538_1_1133" fdg_count="4"></snap>
    <snap snap_id="1134" snap_time="01/27/2021 23:58:43" cnt_inst="1" task_id="1155" owner="SYS" task_name="ADDM:2140826538_1_1134" fdg_count="0"></snap>
  </awr_snaps>
</report>
 
GETCPUINFO
For the requested DBID, date and instance returns the number of threads and cores

Return value, at right, formatted for clarity
dbms_ash.getCPUinfo(
dbid            IN NUMBER   DEFAULT NULL,
observationtime IN VARCHAR2 DEFAULT NULL,
instance_number IN NUMBER   DEFAULT NULL)
RETURN XMLTYPE;
SELECT dbms_ash.getcpuinfo FROM dual;

GETCPUINFO
-----------------------------------------------------------------------------
<report>
  <input></input>
  <cpuinfo time="01/29/2021 02:57:03" cpus="2" cores="1" limit="2"></cpuinfo>
</report>
 
GETDATA
Undocumented dbms_ash.getData(
data_type   IN VARCHAR2,
time_type   IN VARCHAR2,
filter_list IN VARCHAR2,
args        IN VARCHAR2)
RETURN XMLTYPE;
SELECT dbms_ash.getData('', '', '', '') FROM dual;

DBMS_ASH.GETDATA('','','','')
-----------------------------------------------------------------------------------
<report end_time="01/29/2021 03:11:41" time_zone="0" xml_version="48" is_cdb_root="Y">
  <sys_info sys_tz="0" min_time="01/20/2021 23:58:02" max_time="01/29/2021 03:11:41" con_id="0" auto_type="NONE" version="21.0.0.0.0">
  </sys_info>
  <timing start_time="01/29/2021 03:11:41" end_time="01/29/2021 03:11:41" total=".0497" add_info="0" add_info_budget="2.4418" context=".0082" time_picker=".0194" cpu_info=".0131" data="0">
  </timing>
  <context is_local="TRUE" is_cdb_root="TRUE" local_is_pdb="FALSE" local_is_autonomous="FALSE" local_dbid="2140826538" local_role="PRIMARY" local_version="21.0.0.0.0" local_comp_ver="2100000000" underscores="FALSE" sysTZ="0" minAvailTimeUTC="01/20/2021 23:58:02" maxAvailTimeUTC="01/29/2021 03:11:41" e
ndTimeUTC="01/29/2021 03:11:41" include_awr_info="FALSE" resolution="MEDIUM" memEnable="TRUE" memSizeDays="3.213623" memTZ="0" diskEnable="FALSE" disk_comp_ver="2100000000" dbid="21 40826538" awrTablePrefix="DBA_HIST_" diskTZ="0" show_sql="FALSE" verbose_xml="FALSE" minimize_cost="FALSE" use_utc_binds="TRUE">
  </context>
  <report_parameters><type>histogram increment</type>
    <show_sql>n</show_sql>
    <verbose_xml>n</verbose_xml>
    <include_bg>n</include_bg>
    <minimize_cost>n</minimize_cost>
    <resolution>medium</resolution>
  </report_parameters>
  <cpuinfo time="01/29/2021 03:11:41" cpus="2" cores="1" limit="2"></cpuinfo>
  <error>ORA-00936: missing expression
    <sqltext>WITH combined_source AS (SELECT /*+ NO_MERGE */ inst_id, bucket_id, filtered_cnt, total_sec, filtered_sec, min_sample_id FROM TABLE(GV$(CURSOR(SELECT TO_NUMBER(USERENV(&apos;INSTANCE&apos;)) as inst_id, bucket_id, SUM(is_filtered) as filtered_cnt, SUM(tpr) as total_sec, SUM(is_filtered * tpr) as filtered_sec, MIN(sample_id) as min_sample_id FROM (SELECT CASE WHEN (1=1 ) THEN 1 ELSE 0 END as is_filtered, a.usecs_per_row/1000000 as tpr, TRUNC(86400*((CAST(a.sample_time_utc AS DATE))-TO_DATE(&apos;&apos;,&apos;YYYYMMDDHH24MISS&apos;) ) / ) as bucket_id, a.sample_id FROM V$ACTIVE_SESSION_HISTORY a WHERE CAST(a.sample_time_utc AS DATE) &gt;= TO_DATE(&apos;&apos;,&apos;YYYYMMDDHH24MISS&apos;) AND CAST(a.sample_time_utc AS DATE) &lt; TO_DATE(&apos;20210129031141&apos;,&apos;YYYYMMDDHH24MISS&apos;) AND (a.session_state = &apos;ON CPU&apos; OR a.wait_class &lt;&gt; &apos;Idle&apos;) AND a.session_type = &apos;FOREGROUND&apos;) GROUP BY bucket_id)))) ,rac_data AS (
SELECT bucket_id, sum(filtered_cnt) as filtered_cnt, sum(total_sec) as total_sec, sum(filtered_sec) as filtered_sec FROM combined_source GROUP BY bucket_id ORDER BY bucket_id), histogram_xml as (SELECT xmlelement(&quot;histogram&quot;,
xmlattributes( as &quot;bucket_count&quot;, as &quot;bucket_interval&quot;, as &quot;last_bucket_interval&quot;), xmlagg(xmlelement(&quot;bucket&quot;,xmlattributes(
bucket_id+1 as &quot;number&quot;, (CASE WHEN (bucket_id= and &gt; 0) THEN ROUND(total_sec / ,2) ELSE ROUND(total_sec / ,2) END) as &quot;avg_active_sess&quot;,
(CASE WHEN (bucket_id= and &gt; 0) THEN ROUND(filtered_sec / ,2) ELSE ROUND(filtered_sec / ,2) END) as &quot;filtered_aas&quot;)) )) as x FROM (SELECT * FROM rac_data ORDER BY bucket_id)), est_count as (SELECT SUM(filtered_cnt) as cnt FROM rac_data) SELECT est_count.cnt, histogram_xml.x FROM est_count, histogram_xml
    </sqltext>
  </error>
</report>

WITH combined_source AS (
SELECT /*+ NO_MERGE */
inst_id, bucket_id,
filtered_cnt, total_sec, filtered_sec, min_sample_id
FROM TABLE(GV$(CURSOR(
SELECT TO_NUMBER(USERENV('INSTANCE')) as inst_id, bucket_id,
SUM(is_filtered) as filtered_cnt,
SUM(tpr) as total_sec,
SUM(is_filtered * tpr) as filtered_sec,
MIN(sample_id) as min_sample_id
FROM (
SELECT CASE WHEN (1=1 ) THEN 1 ELSE 0 END as is_filtered, a.usecs_per_row/1000000 as tpr,
TRUNC(86400*((CAST(a.sample_time_utc AS DATE))-TO_DATE('','YYYYMMDDHH24MISS') )
/ ) as bucket_id, a.sample_id
FROM V$ACTIVE_SESSION_HISTORY a
WHERE CAST(a.sample_time_utc AS DATE) >= TO_DATE('','YYYYMMDDHH24MISS')
AND CAST(a.sample_time_utc AS DATE) < TO_DATE('20210129031141','YYYYMMDDHH24MISS')
AND (a.session_state = 'ON CPU'
OR a.wait_class <> 'Idle') AND a.session_type = 'FOREGROUND')
GROUP BY bucket_id)))) ,rac_data AS (
SELECT bucket_id, sum(filtered_cnt) as filtered_cnt,
sum(total_sec) as total_sec, sum(filtered_sec) as filtered_sec
FROM combined_source GROUP BY bucket_id ORDER BY bucket_id ) ,histogram_xml as
(SELECT xmlelement("histogram",
xmlattributes( as "bucket_count",
as "bucket_interval", as "last_bucket_interval"),
xmlagg(xmlelement("bucket",xmlattributes(
bucket_id+1 as "number",
(CASE WHEN (bucket_id= and > 0)
THEN ROUND(total_sec / ,2)
ELSE ROUND(total_sec / ,2) END)
as "avg_active_sess",
(CASE WHEN (bucket_id= and > 0)
THEN ROUND(filtered_sec / ,2)
ELSE ROUND(filtered_sec / ,2) END)
as "filtered_aas"))
)) as x
FROM (SELECT * FROM rac_data ORDER BY bucket_id)
), est_count as (SELECT SUM(filtered_cnt) as cnt FROM rac_data)
SELECT est_count.cnt, histogram_xml.x FROM est_count, histogram_xml;
ORA-00936: missing expression
 
GETDATAHISTORICAL
Undocumented dbms_ash.getDataHistorical(
dbid            IN NUMBER,
filter_list     IN VARCHAR2,
begin_time_utc  IN VARCHAR2,
end_time_utc    IN VARCHAR2,
time_since_sec  IN NUMBER,
show_sql        IN VARCHAR2,
verbose_xml     IN VARCHAR2,
include_bg      IN VARCHAR2,
instance_number IN NUMBER,
minimize_cost   IN VARCHAR2)
RETURN XMLTYPE;
SELECT dbms_ash.getDataHistorical(2140826538)
FROM dual;

DBMS_ASH.GETDATAHISTORICAL(2140826538)
----------------------------------------------------------------------------------------------------------------
<report>
  <timing start_time="05/05/2021 12:11:50" end_time="05/05/2021 12:11:50"
    exp_rows="2400" total=".042" add_info="0" add_info_budget="10" context=".031">
  </timing>
  <report_parameters>
    <type>datahistorical</type>
    <dbid>2140826538</dbid>
    <time_since_sec>86400</time_since_sec>
    <show_sql>n</show_sql>
    <verbose_xml>n</verbose_xml>
    <include_bg>n</include_bg>
    <minimize_cost>n</minimize_cost>
  </report_parameters>
  <context>
    <error>
      <english_msg>No data in AWR</english_msg>
      <id>err_no_data_awr</id>
    </error>
    <is_local>FALSE</is_local>
    <is_cdb_root>FALSE</is_cdb_root>
    <local_is_pdb>FALSE</local_is_pdb>
    <local_is_autonomous>FALSE</local_is_autonomous>
    <local_dbid>1863203691</local_dbid>
    <local_version>19.0.0.0.0</local_version>
    <local_comp_ver>1900000000</local_comp_ver>
    <underscores>FALSE</underscores>
    <beginTimeUTC>05/04/2021 17:11:50</beginTimeUTC>
    <endTimeUTC>05/05/2021 17:11:50</endTimeUTC>
    <include_awr_info>FALSE</include_awr_info>
    <bucketCount>120</bucketCount>
    <bucketInterval>720</bucketInterval>
    <lastBucketSize>0</lastBucketSize>
    <memEnable>FALSE</memEnable>
    <diskEnable>FALSE</diskEnable>
    <disk_comp_ver>1900000000</disk_comp_ver>
    <dbid>2140826538</dbid>
    <awrTablePrefix>DBA_HIST_</awrTablePrefix>
    <show_sql>FALSE</show_sql>
    <verbose_xml>FALSE</verbose_xml>
    <minimize_cost>FALSE</minimize_cost>
    <use_utc_binds>TRUE</use_utc_binds>
  </context>
</report>
 
GETDATAREALTIME
Undocumented dbms_ash.getDataRealTime(
filter_list     IN VARCHAR2,
time_since_sec  IN NUMBER,
show_sql        IN VARCHAR2,
verbose_xml     IN VARCHAR2,
include_bg      IN VARCHAR2,
instance_number IN NUMBER,
minimize_cost   IN VARCHAR2)
RETURN XMLTYPE;
TBD
 
GETHISTOGRAMHISTORICAL
Undocumented

Manually formatted for clarity
dbms_ash.getHistogramHistorical(
dbid            IN NUMBER,
filter_list     IN VARCHAR2,
begin_time_utc  IN VARCHAR2,
end_time_utc    IN VARCHAR2,
time_since_sec  IN NUMBER,
show_sql        IN VARCHAR2,
verbose_xml     IN VARCHAR2,
include_bg      IN VARCHAR2,
instance_number IN NUMBER)
RETURN XMLTYPE;
SELECT dbms_ash.getHistogramHistorical(2140826538)
FROM dual;

DBMS_ASH.GETHISTOGRAMHISTORICAL(2140826538)
----------------------------------------------------------------------------------------------------
<report>
  <timing start_time="05/05/2021 12:17:46" end_time="05/05/2021 12:17:46" exp_rows="2400"
  total=".008" add_info="0" add_info_budget="10" context=".008"></timing>
  <report_parameters>
    <type>histogram historical</type>
    <dbid>2140826538</dbid>
    <time_since_sec>86400</time_since_sec>
    <show_sql>n</show_sql>
    <verbose_xml>n</verbose_xml>
    <include_bg>n</include_bg>
    <minimize_cost>n</minimize_cost>
  </report_parameters>
  <context>
    <error>
      <english_msg>No data in AWR</english_msg>
      <id>err_no_data_awr</id>
    </error>
    <is_local>FALSE</is_local>
    <is_cdb_root>FALSE</is_cdb_root>
    <local_is_pdb>FALSE</local_is_pdb>
    <local_is_autonomous>FALSE</local_is_autonomous>
    <local_dbid>1863203691</local_dbid>
    <local_version>19.0.0.0.0</local_version>
    <local_comp_ver>1900000000</local_comp_ver>
    <underscores>FALSE</underscores>
    <beginTimeUTC>05/04/2021 17:17:46</beginTimeUTC>
    <endTimeUTC>05/05/2021 17:17:46</endTimeUTC>
    <include_awr_info>FALSE</include_awr_info>
    <bucketCount>120</bucketCount>
    <bucketInterval>720</bucketInterval>
    <lastBucketSize>0</lastBucketSize>
    <memEnable>FALSE</memEnable>
    <diskEnable>FALSE</diskEnable>
    <disk_comp_ver>1900000000</disk_comp_ver>
    <dbid>2140826538</dbid>
    <awrTablePrefix>DBA_HIST_</awrTablePrefix>
    <show_sql>FALSE</show_sql>
    <verbose_xml>FALSE</verbose_xml>
    <minimize_cost>FALSE</minimize_cost>
    <use_utc_binds>TRUE</use_utc_binds>
  </context>
</report>
 
GETHISTOGRAMREALTIME
Undocumented dbms_ash.getHistoricalRealTime(
filter_list     IN VARCHAR2,
time_since_sec  IN NUMBER,
show_sql        IN VARCHAR2,
verbose_xml     IN VARCHAR2,
include_bg      IN VARCHAR2,
instance_number IN NUMBER)
RETURN XMLTYPE;
TBD
 
GETTIMEPICKERHISTORICAL
Undocumented dbms_ash.getTimePickerHistorical(
DBID            IN NUMBER,
begin_time_utc  IN VARCHAR2,
end_time_utc    IN VARCHAR2,
time_since_sec  IN NUMBER,
show_sql        IN VARCHAR2,
verbose_xml     IN VARCHAR2,
instance_number IN NUMBER,
awr_info        IN VARCHAR2)
RETURN XMLTYPE;
TBD
 
GETTIMEPICKERREALTIME
Undocumented dbms_ash.getTimePickerRealTime(
time_since_sec  IN NUMBER,
show_sql        IN VARCHAR2,
verbose_xml     IN VARCHAR2,
instance_number IN NUMBER,
awr_info        IN VARCHAR2)
RETURN XMLTYPE;
TBD
 
GETVERSION
Returns the ASH version number dbms_ash.getVersion RETURN VARCHAR2;
SELECT dbms_ash.getVersion
FROM dual;

GETVERSION
----------
        48
 
INCREMENTDATA
Undocumented dbms_ash.incrementData(
filter_list     IN VARCHAR2,
begin_time_utc  IN VARCHAR2,
bucket_size     IN NUMBER,
show_sql        IN VARCHAR2,
verbose_xml     IN VARCHAR2,
include_bg      IN VARCHAR2,
instance_number IN NUMBER,
minimize_cost   IN VARCHAR2)
RETURN XMLTYPE;
TBD
 
INCREMENTHISTOGRAM
Undocumented dbms_ash.incrementHistogram(
filter_list     IN VARCHAR2,
begin_time_utc  IN VARCHAR2,
bucket_size     IN NUMBER,
show_sql        IN VARCHAR2,
verbose_xml     IN VARCHAR2,
include_bg      IN VARCHAR2,
instance_number IN NUMBER)
RETURN XMLTYPE;
TBD
 
INCREMENTTIMEPICKER
Undocumented dbms_ash.incrementTimePicker(
begin_time_utc  IN VARCHAR2,
bucket_size     IN NUMBER,
show_sql        IN VARCHAR2,
verbose_xml     IN VARCHAR2,
instance_number IN NUMBER,
AWR_INFO        IN VARCHAR2)
RETURN XMLTYPE;
TBD
 
STR_TO_ASCII
No doubt Oracle has some intended purpose for this but given the output of this demo I am not sure what it is: Hardly seems worthwhile

Appears to only be able to handle up to ASCII 255.
dbms_ash.str_to_ascii(s IN VARCHAR2) RETURN VARCHAR2;
SELECT dbms_ash.str_to_ascii('Daniel' || CHR(299) || 'Morgan')
FROM dual;

DBMS_ASH.STR_TO_ASCII('DANIEL'||CHR(299)||'MORGAN')
----------------------------------------------------
Daniel+Morgan

Related Topics
Built-in Functions
Built-in Packages
DBMS_ASH_INTERNAL
What's New In 19c
What's New In 20c-21c

Morgan's Library Page Footer
This site is maintained by Dan Morgan. Last Updated: This site is protected by copyright and trademark laws under U.S. and International law. © 1998-2019 Daniel A. Morgan All Rights Reserved
  DBSecWorx