我正试图在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
,不要.所以这种方法有效,但当然也会抑制该类型的任何合法警告.
这似乎是一个错误,没有修复或真正的解决方法.如果您有权访问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
,不要.所以这种方法有效,但当然也会抑制该类型的任何合法警告.