PLW-07202:绑定类型将导致远离列类型的转换

 欧阳羽昌53 发布于 2023-01-12 18:06

我正试图在15年内编写我的第一个PL/SQL存储过程.我收到了类型转换警告:

2 PLW-07202: bind type would result in conversion away from column type SQL1.sql 11 60 

尝试将当前系统时间分配给以下列时:

CRET_TIMESTMP TIMESTAMP(6)      NOT NULL

这是记录的整个表定义.

CREATE TABLE FIN_IT_RPT.COGNOS_RPTNG_SCHEDLNG_STAT
    (
        JOB_NM        VARCHAR2(20 BYTE) NOT NULL
       ,JOB_STAT_CD   VARCHAR2(1 BYTE)  NOT NULL
       ,CRET_TIMESTMP TIMESTAMP(6)      NOT NULL
       ,CRET_OPER_ID  VARCHAR2(10 BYTE) NOT NULL
       ,UPDT_TIMESTMP TIMESTAMP(6)
       ,UPDT_USR_ID   VARCHAR2(10 BYTE)
    )
    TABLESPACE USERS
    STORAGE (INITIAL 64 K
             NEXT 1 M
             MAXEXTENTS UNLIMITED)
    LOGGING;

这是我的程序:

CREATE OR REPLACE PROCEDURE FIN_IT_RPT.UPDATE_FINODS_COGNOS_STATUS
    (
     P_JOB_STAT_CD IN COGNOS_RPTNG_SCHEDLNG_STAT.JOB_NM % TYPE
    )
    AS
    BEGIN

        UPDATE COGNOS_RPTNG_SCHEDLNG_STAT
            SET
                COGNOS_RPTNG_SCHEDLNG_STAT.JOB_STAT_CD   = P_JOB_STAT_CD
               ,COGNOS_RPTNG_SCHEDLNG_STAT.UPDT_TIMESTMP = CAST(CURRENT_TIMESTAMP AS TIMESTAMP(6))
            WHERE
                COGNOS_RPTNG_SCHEDLNG_STAT.JOB_NM = 'FINODS';

        COMMIT;

    END UPDATE_FINODS_COGNOS_STATUS;

为什么我收到警告,如何阻止类型转换?我知道这只是一个警告,但我不应该能够显式地将其转换为目标类型或使用本机获取适当格式时间的函数吗?

这是我正在使用的:

Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production
PL/SQL Release 11.2.0.3.0 - Production
CORE 11.2.0.3.0 Production
TNS for Linux: Version 11.2.0.3.0 - Production
NLSRTL Version 11.2.0.3.0 - Production    

Alex Poole.. 6

这似乎是一个错误,没有修复或真正的解决方法.如果您有权访问My Oracle Support,请查找文档ID 445136.1.

这个论坛帖子提出了一个解决方法:

在创建或替换出现此问题的包,函数或过程之前运行此块:

BEGIN
DBMS_WARNING.SET_WARNING_SETTING_STRING('ENABLE:ALL', 'SESSION');
DBMS_WARNING.ADD_WARNING_SETTING_NUM(warning_number => 7202, warning_value => 'DISABLE', scope => 'SESSION');
END;
/

或者您可以使用文档中描述的ALTER SESSION语法:

ALTER SESSION SET PLSQL_WARNINGS = 'ENABLE:ALL,DISABLE:07202';

这个SQL小提琴显示警告; 这一个与PLW-07202一起被压制DBMS_WARNING,而这一个压制ALTER SESSION,不要.所以这种方法有效,但当然也会抑制该类型的任何合法警告.

1 个回答
  • 这似乎是一个错误,没有修复或真正的解决方法.如果您有权访问My Oracle Support,请查找文档ID 445136.1.

    这个论坛帖子提出了一个解决方法:

    在创建或替换出现此问题的包,函数或过程之前运行此块:

    BEGIN
    DBMS_WARNING.SET_WARNING_SETTING_STRING('ENABLE:ALL', 'SESSION');
    DBMS_WARNING.ADD_WARNING_SETTING_NUM(warning_number => 7202, warning_value => 'DISABLE', scope => 'SESSION');
    END;
    /
    

    或者您可以使用文档中描述的ALTER SESSION语法:

    ALTER SESSION SET PLSQL_WARNINGS = 'ENABLE:ALL,DISABLE:07202';
    

    这个SQL小提琴显示警告; 这一个与PLW-07202一起被压制DBMS_WARNING,而这一个压制ALTER SESSION,不要.所以这种方法有效,但当然也会抑制该类型的任何合法警告.

    2023-01-12 18:08 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有