文档首页 > > 工具指南> Migration Tool SQL语法迁移工具> Oracle语法迁移> 系统函数> 其他函数

其他函数

分享
更新时间: 2019/08/09 11:20

本节介绍如下函数:

类型转换

Oracle/PLSQL的CAST函数用于转换数据类型。

CAST ( AS TEXT)

一般情况下,静态值迁移为CAST AS TEXT。但是,在 PL/SQL 过程和函数中 ,SELECT INTO子句中包的含静态值不迁移,静态值输入和输出完全相同。

输入: 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;
 
 

输出

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

在Oracle中,CLOB数据类型可将变长字符数据(字符大对象)存储在单字节或多字节(支持超过4 GB)的数据库字符集中。TO_CLOB函数用于将字符串(CHAR、VARCHAR2 、NCHAR、NVARHCAR2、CLOB或NCLOB)转换为CLOB数据类型。MigrationTool支持SQL和PL/SQL中的TO_CLOB。

输入:在SQL中使TO_CLOB

create table clob_t ( c1 int, c2 clob );
insert into clob_t values ( 1, TO_CLOB('abcddedf') );

输出

create table clob_t ( c1 int, c2 clob );
insert into clob_t values ( 1, CAST('abcddedf' AS CLOB) );

输入:在PL/SQL中使用TO_CLOB

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;
/

输出

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( )

类似于SYS_ID VARCHAR2 (32) DEFAULT sys_guid( )的函数名称不被支持,因此表列名称显示为默认值。

输入

  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()
   );

输出

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

这些函数使用不支持sys函数来调用dbms_job,例如,sys.dbms_job.submit(job => v_jobid, what => 'begin eip_htm_integration_pkg.import_instruction_job; end;', next_date => SYSDATE)。

如果从上面删除sys,调用将会生效,例如,dbms_job.submit(job => v_jobid, what => 'begin eip_htm_integration_pkg.import_instruction_job; end;', next_date => SYSDATE)。

脚本:EIP_HTM_INTEGRATION_PKG.sql, SAD_CALC_CUSTOM_DRAWBACK_PKG.sql

输入:

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;

输出:

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 ;

输入

CREATE OR REPLACE 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;
/

输出

CREATE OR REPLACE PROCEDURE greate_import_instruction_job 
PACKAGE 
IS 
 v_jobid NUMBER ;
BEGIN
     IF bas_lookup_misc_pkg.exits_run_job ( 'eip_htm_integration_pkg.import_instruction_job' ) = 'N' THEN
               dbms_job.submit ( job => v_jobid ,what => 'begin eip_htm_integration_pkg.import_instruction_job; end;' ,next_date => SYSDATE ) ;

  /* COMMIT; */
  NULL ;
     END IF ;
END ;
/

用户环境

在Oracle中,USERENV是描述当前会话的命名空间,用于获取有关当前Oracle会话的信息。Migration Tool可迁移如下示例中所示的USERENV语句。

不支持以下情况,出现以下情况工具将报异常。

错误原因

示例输入

示例输出

不支持的参数

SELECT userenv('LANG') LANG FROM DUAL;

SELECT userenv('LANG') LANG FROM DUAL;

  

  

参数是变量

SELECT userenv(ENTRYID) LANG FROM DUAL;

SELECT userenv(ENTRYID) LANG FROM DUAL;

未提供参数

SELECT userenv() LANG FROM DUAL;

SELECT userenv() LANG FROM DUAL;

空参数

SELECT userenv('SID','INSTANCE' ) LANG FROM DUAL;

SELECT userenv('SID','INSTANCE' ) LANG FROM DUAL;

提供了多个参数

SELECT userenv('' ) LANG FROM DUAL;

SELECT userenv('' ) LANG FROM DUAL;

一个语法有效另外一个无效 (不支持的参数)

SELECT USERENV( 'sid' ) ,USERENV( 'lang' ) FROM dual ;

SELECT USERENV( 'sid' ) ,USERENV( 'lang' ) FROM dual ;

输入内容含双引号

SELECT USERENV( "sid" ) FROM dual ;

SELECT USERENV( "sid" ) FROM dual ;

说明:

在使用此函数之前:

  1. 创建并使用MIG_ORA_EXT模式。
  2. 复制customs_scripts文件的内容,并在要执行迁移的所有目标数据库中执行此脚本。详情请参见自定义数据库配置迁移流程

输入:USERENV

SELECT  userenv('SID') SID FROM DUAL;

输出

SELECT  mig_ora_ext.userenv('SID') SID FROM DUAL;

输入: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 ;
/

输出

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 ;
   /
分享:

    相关文档

    相关产品

文档是否有解决您的问题?

提交成功!

非常感谢您的反馈,我们会继续努力做到更好!

反馈提交失败,请稍后再试!

*必选

请至少选择或填写一项反馈信息

字符长度不能超过200

提交反馈 取消

如您有其它疑问,您也可以通过华为云社区问答频道来与我们联系探讨

跳转到云社区