oracle utl_lms用变量替换整数
我使用oracle的UTL_LMS.MESSAGE_FORMAT遇到了一个奇怪的问题.当使用变量替换来定位%d替换时,UTL_LMS正在悄悄地无法替换和中断我的调用堆栈中的异常消息.
UTL_LMS.FORMAT_MESSAGE调用VARCHAR参数,但doc(11gR2)示例中的类型转换似乎与整数变量兼容.但是,我的%d永远不会被替换. 我希望得到一些想法/建议.下面是失败的一个例子. 运行以下内容: DECLARE C_INTRANSITIVE_VERB CONSTANT VARCHAR2(50) := 'breakdance'; C_SUBJECT_NOUN CONSTANT VARCHAR2(50) := 'hobbit'; C_PREPOSITION_OBJECT CONSTANT VARCHAR2(50) := 'wookie'; C_MULTIPLIER CONSTANT INTEGER := 19; C_TEMPLATE CONSTANT VARCHAR2(400) := 'The %s likes to %s with the %s %d times a day.'; BEGIN DBMS_OUTPUT.PUT_LINE('My integer is: '|| C_MULTIPLIER); DBMS_OUTPUT.PUT_LINE( UTL_LMS.FORMAT_MESSAGE(C_TEMPLATE,C_SUBJECT_NOUN,C_INTRANSITIVE_VERB,C_PREPOSITION_OBJECT,C_MULTIPLIER) ); END; / 产量:
但是,下面转换raw int fine: DECLARE C_INTRANSITIVE_VERB CONSTANT VARCHAR2(50) := 'breakdance'; C_SUBJECT_NOUN CONSTANT VARCHAR2(50) := 'hobbit'; C_PREPOSITION_OBJECT CONSTANT VARCHAR2(50) := 'wookie'; C_MULTIPLIER CONSTANT INTEGER := 19; C_TEMPLATE CONSTANT VARCHAR2(400) := 'The %s likes to %s with the %s %d times a day.'; BEGIN DBMS_OUTPUT.PUT_LINE('My integer is: '|| C_MULTIPLIER); DBMS_OUTPUT.PUT_LINE( UTL_LMS.FORMAT_MESSAGE(C_TEMPLATE,19) ); END; /
以下解决方法是不合需要的. DECLARE C_INTRANSITIVE_VERB CONSTANT VARCHAR2(50) := 'breakdance'; C_SUBJECT_NOUN CONSTANT VARCHAR2(50) := 'hobbit'; C_PREPOSITION_OBJECT CONSTANT VARCHAR2(50) := 'wookie'; C_MULTIPLIER CONSTANT INTEGER := 19; C_TEMPLATE CONSTANT VARCHAR2(400) := 'The %s likes to %s with the %s %d times a day.'; BEGIN DBMS_OUTPUT.PUT_LINE('My integer is: '|| C_MULTIPLIER); DBMS_OUTPUT.PUT_LINE( UTL_LMS.FORMAT_MESSAGE(C_TEMPLATE,TO_CHAR(C_MULTIPLIER)) ); END; /
>为什么FORMAT_MESSAGE接受原始整数,但在INTEGER类型(或一般NUMBER类型)变量上失败? 谢谢! 查看文档https://docs.oracle.com/database/121/ARPLS/u_lms.htm#ARPLS71196 该示例指定PLS_INTEGER而不是Integer或Number.我已经测试了这个,并且使用PLS_INTEGER可以在Integer没有的情况下工作. 我知道这不是一个理想的解决方案,我不确定是否定义您的变量,因为pls_integer将是一个选项.但可能会有一些帮助. DECLARE C_INTRANSITIVE_VERB CONSTANT VARCHAR2(50) := 'breakdance'; C_SUBJECT_NOUN CONSTANT VARCHAR2(50) := 'hobbit'; C_PREPOSITION_OBJECT CONSTANT VARCHAR2(50) := 'wookie'; C_MULTIPLIER CONSTANT PLS_INTEGER := 19; C_TEMPLATE CONSTANT VARCHAR2(400) := 'The %s likes to %s with the %s %d times a day.'; BEGIN DBMS_OUTPUT.PUT_LINE('My integer is: '|| C_MULTIPLIER); DBMS_OUTPUT.PUT_LINE( UTL_LMS.FORMAT_MESSAGE(C_TEMPLATE,C_MULTIPLIER) ); END; 给出输出 My integer is: 19 The hobbit likes to breakdance with the wookie 19 times a day. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |