ale*_*bbs 5 oracle plsql substitution oracle11g str-replace
我使用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;
/
Run Code Online (Sandbox Code Playgroud)
产量:
我的整数是:19
霍比特人喜欢每天与wookie时代的霹雳舞.
但是,下面转换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,C_SUBJECT_NOUN,C_INTRANSITIVE_VERB,C_PREPOSITION_OBJECT,19)
);
END;
/
Run Code Online (Sandbox Code Playgroud)
我的整数是:19
霍比特人喜欢每天19次与wookie霹雳舞.
以下解决方法是不合需要的.
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,TO_CHAR(C_MULTIPLIER))
);
END;
/
Run Code Online (Sandbox Code Playgroud)
我的整数是:19
霍比特人喜欢每天19次与wookie霹雳舞.
谢谢!
小智 4
查看文档
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_SUBJECT_NOUN,C_INTRANSITIVE_VERB,C_PREPOSITION_OBJECT,C_MULTIPLIER)
);
END;
Run Code Online (Sandbox Code Playgroud)
给出输出
My integer is: 19
The hobbit likes to breakdance with the wookie 19 times a day.
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
414 次 |
| 最近记录: |