Other Functions
This section describes the following functions:
Type Casting
The Oracle/PLSQL CAST function converts one data type to another.
CAST ( AS TEXT)
Static values are migrated as CAST AS TEXT. In the PL/SQL storage prcedures and fucntions, static values in the in the SELECT INTO clause are not migrated. The input and output static data are the same.
Input - CAST (AS TEXT)
BEGIN
IF
V_DETAILSTATUS = '002'
THEN
meta.p_mt_std_cover_log.r_cover_log ( '384969028' ,'566' ,'35' ) ;
SELECT
'abc' INTO V_RECL_USER
FROM
STAT_DETAIL
WHERE
DAPCODE = V_DAPCODE
AND DETAIL_ID = V_DETAIL_ID ;
ELSIF
...
END;
Output
BEGIN
IF
V_DETAILSTATUS = '002'
THEN
meta.p_mt_std_cover_log.r_cover_log ( '384969028' ,'566' ,'35' ) ;
SELECT
'abc' INTO V_RECL_USER
FROM
STAT_DETAIL
WHERE
DAPCODE = V_DAPCODE
AND DETAIL_ID = V_DETAIL_ID ;
ELSIF
...
END; TO_CLOB
In Oracle, the CLOB data type stores variable-length character data (character large objects) in the single-byte or multi-byte character set (supports more than 4 GB). The TO_CLOB function is used to convert a string (CHAR, VARCHAR2, NCHAR, NVARHCAR2, CLOB, or NCLOB) to the CLOB data type. DSC supports TO_CLOB in SQL and PL/SQL.
Input - TO_CLOB in SQL
create table clob_t ( c1 int, c2 clob );
insert into clob_t values ( 1, TO_CLOB('abcddedf') ); Output
create table clob_t ( c1 int, c2 clob );
insert into clob_t values ( 1, CAST('abcddedf' AS CLOB) ); Input - TO_CLOB in PL/SQL
declare v_clob clob;
v_text varchar(1000);
begi in Sn
v_clob := TO_CLOB('abcddedf');
insert into clob_t values ( 2, v_clob );
v_text := '123454';
insert into clob_t values ( 3, TO_CLOB(v_text || v_clob) );
end;
/ Output
declare v_clob clob;
v_text varchar(1000);
begin
v_clob := CAST('abcddedf' AS CLOB);
insert into clob_t values ( 2, v_clob );
v_text := '123454';
insert into clob_t values ( 3, CAST(v_text || v_clob AS CLOB) );
end;
/ sys_guid( )
The table column name like SYS_ID VARCHAR2 (32) DEFAULT sys_guid( ) is not supported. Therefore, the default table column name is displayed.
Input
CREATE TABLE SAD.FND_DATA_CHANGE_LOGS_T
( LOGID NUMBER,
TABLE_NAME VARCHAR2(40) NOT NULL ENABLE,
TABLE_KEY_COLUMNS VARCHAR2(200),
TABLE_KEY_VALUES VARCHAR2(200),
COLUMN_NAME VARCHAR2(40) NOT NULL ENABLE,
COLUMN_CHANGE_FROM_VALUE VARCHAR2(200),
COLUMN_CHANGE_TO_VALUE VARCHAR2(200),
DESCRIPTION VARCHAR2(500),
SYS_ID VARCHAR2(32) DEFAULT sys_guid()
); Output
CREATE TABLE sad.fnd_data_change_logs_t
(
logid NUMBER
,table_name VARCHAR2 (40) NOT NULL /* ENABLE */
,table_key_columns VARCHAR2 (200)
,table_key_values VARCHAR2 (200)
,column_name VARCHAR2 (40) NOT NULL /* ENABLE */
,column_change_from_value VARCHAR2 (200)
,column_change_to_value VARCHAR2 (200)
,description VARCHAR2 (500)
,sys_id VARCHAR2 (32) DEFAULT MIG_ORA_EXT.Sys_guid ()
); sys.dbms_job.submit
The dbms_job function cannot be called using sys. For example, sys.dbms_job.submit(job => v_jobid, what => 'begin eip_htm_integration_pkg.import_instruction_job; end;', next_date => SYSDATE);
After sys is removed, the call takes effect. For example, dbms_job.submit(job => v_jobid, what => 'begin eip_htm_integration_pkg.import_instruction_job; end;', next_date => SYSDATE);
SCRIPTS: EIP_HTM_INTEGRATION_PKG.sql, SAD_CALC_CUSTOM_DRAWBACK_PKG.sql
INPUT
CREATE OR REPLACE PACKAGE BODY "SAD"."EIP_HTM_INTEGRATION_PKG" IS
PROCEDURE greate_import_instruction_job IS
v_jobid NUMBER;
BEGIN
IF bas_lookup_misc_pkg.exits_run_job('eip_htm_integration_pkg.import_instruction_job') = 'N'
THEN
sys.dbms_job.submit(job => v_jobid,
what => 'begin
eip_htm_integration_pkg.import_instruction_job;
end;',
next_date => SYSDATE);
COMMIT;
END IF;
---
END greate_import_instruction_job;
END EIP_HTM_INTEGRATION_PKG; OUTPUT :
CREATE OR REPLACE PROCEDURE SAD.EIP_HTM_INTEGRATION_PKG#greate_import_instruction_job IS v_jobid NUMBER ; ex_data_error EXCEPTION ; ex_prog_error EXCEPTION ; BEGIN IF BAS_LOOKUP_MISC_PKG#exits_run_job ( 'eip_htm_integration_pkg.import_instruction_job' ) = 'N' THEN sys.dbms_job.submit ( job => v_jobid ,what => 'begin eip_htm_integration_pkg.import_instruction_job; end;' ,next_date => SYSDATE ) ; /* COMMIT; */ NULL ; END IF ; --- END ;
User Environment
In Oracle, USERENV is a namespace that describes the current session, and it is used to obtain information about the current Oracle session. DSC supports the migration of USERENV statements as shown in the examples.
The following scenarios are not supported and DSC will log an exception for them:
| Error Cause | Sample Input | Sample Output |
|---|---|---|
| Unsupported parameter | SELECT userenv('LANG') LANG FROM DUAL; | SELECT userenv('LANG') LANG FROM DUAL; |
| Parameter is a variable | SELECT userenv(ENTRYID) LANG FROM DUAL; | SELECT userenv(ENTRYID) LANG FROM DUAL; |
| No parameter provided | SELECT userenv() LANG FROM DUAL; | SELECT userenv() LANG FROM DUAL; |
| Empty parameter provided | SELECT userenv('SID','INSTANCE' ) LANG FROM DUAL; | SELECT userenv('SID','INSTANCE' ) LANG FROM DUAL; |
| More than one parameter provided | SELECT userenv('' ) LANG FROM DUAL; | SELECT userenv('' ) LANG FROM DUAL; |
| One valid syntax and one invalid syntax (unsupported parameter) | SELECT USERENV( 'sid' ) ,USERENV( 'lang' ) FROM dual ; | SELECT USERENV( 'sid' ) ,USERENV( 'lang' ) FROM dual ; |
| Double quotes in input | SELECT USERENV( "sid" ) FROM dual ; | SELECT USERENV( "sid" ) FROM dual ; |
Before using this function, perform the following operations:
- Create and use the MIG_ORA_EXT schema.
- Copy the contents of the custom script and execute the script in all target databases for which migration is to be performed. For details, see Migration Process.
Input - USERENV
SELECT userenv('SID') SID FROM DUAL; Output
SELECT mig_ora_ext.userenv('SID') SID FROM DUAL; Input - USERENV
CREATE
OR REPLACE PROCEDURE test_userEnvFun AS
v_sid NUMBER ( 8 ) := 0 ;
v_instid NUMBER ( 8 ) := 0 ;
BEGIN
SELECT
USERENV( 'sid' ) ,USERENV( 'instance' ) INTO v_sid ,v_instid
FROM
dual ;
end test_userEnvFun ;
/ Output
CREATE
OR REPLACE PROCEDURE test_userEnvFun AS
v_sid NUMBER ( 8 ) := 0 ;
v_instid NUMBER ( 8 ) := 0 ;
BEGIN
SELECT
MIG_ORA_EXT.USERENV ( 'sid' ) ,MIG_ORA_EXT.USERENV ( 'instance' ) INTO v_sid ,v_instid
FROM
dual ;
end ;
/ DBLINK
DBLINK should be replaced with configurable data sources.
| Oracle Syntax | Syntac After Migration |
|---|---|
SELECT col1, col2+col3 AS expcol2, col3 expcol3
FROM stage.INF_RIM_112_INFO_M@HABIDB1 t
WHERE t.month_id = last_months
AND DELETE_STATE = '0';
SELECT t.*
FROM (select * from stage.INF_RIM_112_INFO_M@HABIDB1 t
WHERE t.month_id = last_months
AND DELETE_STATE = '0') t,
dim.dim_ref_area_no t1
WHERE t1.AREA_ID_PROV = t.area_no
AND t1.area_no = to_char('abc');
SELECT t.*
FROM (select *
from stage.INF_RIM_112_INFO_M@HABIDB1 t) t,
dim.dim_ref_area_no t1
WHERE t1.AREA_ID_PROV = t.area_no
AND t1.area_no = to_char('abc');
SELECT COUNT(1) INTO V_CNT1
FROM ODS.ODS_EXECUTE_LOG@HABIDB1
WHERE MONTH_ID = LAST_MONTHS
AND PROCNAME IN ('P_INF_RIM_112_INFO_M')
AND RESULT = 'SUCCESS';
SELECT COUNT(1) AS cnt INTO V_CNT1
FROM ODS.ODS_EXECUTE_LOG@HABIDB1
WHERE MONTH_ID = LAST_MONTHS
AND PROCNAME IN ('P_INF_RIM_112_INFO_M')
AND RESULT = 'SUCCESS'; | SELECT *
FROM exec_on_extension('ds_ora_habidb1', $q$SELECT col1, col2+col3 AS expcol2, col3 expcol3
FROM stage.INF_RIM_112_INFO_M t
WHERE t.month_id = last_months
AND DELETE_STATE = '0'$q$)
AS (col1 TEXT, expcol2 TEXT, expcol3 TEXT);
SELECT t.*
FROM (SELECT * FROM exec_on_extension('ds_ora_habidb1', $q$select *
from stage.INF_RIM_112_INFO_M t
WHERE t.month_id = last_months
AND DELETE_STATE = '0'
$q$) AS (month_id TEXT, delete_state TEXT) ) t,
dim.dim_ref_area_no t1
WHERE t1.AREA_ID_PROV = t.area_no
AND t1.area_no = to_char('abc');
SELECT t.*
FROM (SELECT * FROM exec_on_extension('ds_ora_habidb1', $q$select *
from stage.INF_RIM_112_INFO_M t
$q$) AS (a TEXT) ) t,
dim.dim_ref_area_no t1
WHERE t1.AREA_ID_PROV = t.area_no
AND t1.area_no = to_char('abc');
SELECT aggfn
INTO V_CNT1 FROM exec_on_extension('ds_ora_habidb1', $q$SELECT COUNT(1)
FROM ODS.ODS_EXECUTE_LOG
WHERE MONTH_ID = LAST_MONTHS
AND PROCNAME IN ('P_INF_RIM_112_INFO_M')
AND RESULT = 'SUCCESS'$q$) AS (aggfn TEXT);
SELECT cnt
INTO V_CNT1 FROM exec_on_extension('ds_ora_habidb1', $q$SELECT COUNT(1) AS cnt
FROM ODS.ODS_EXECUTE_LOG
WHERE MONTH_ID = LAST_MONTHS
AND PROCNAME IN ('P_INF_RIM_112_INFO_M')
AND RESULT = 'SUCCESS'$q$) AS (cnt TEXT); |
Last Article: Regular Expression Functions
Next Article: PL/SQL
Did this article solve your problem?
Thank you for your score!Your feedback would help us improve the website.