【发布时间】:2016-07-26 17:25:00
【问题描述】:
在下面的脚本中,如果我尝试 substr 为 4000 个字符,它可以工作并显示我的特定 ID 中的所有文本以及相应的 DB 字段 ID 和语言,如果我增加它,甚至 4001 db 会弹出错误 - ora-06502: pl /sql: 数值或数值错误。
Create or replace function GET_AER_TEXT5(M_AER_ID IN NUMBER,
F_ID IN VARCHAR2,PREF_LANGUAGE IN VARCHAR2)
IS
AERTEXT VARCHAR2(32000);
LANG_PARAM VARCHAR2(2000);
AER_CLOB CLOB;
BEGIN
FOR c1 IN (
select TEXT from AER_TEXT
where FIELD_ID=F_ID and AER_ID=M_AER_ID and LANGUAGE IN(PREF_LANGUAGE)
)
LOOP
IF c1.text IS NOT NULL THEN
AER_CLOB:=AER_CLOB || c1.text;
END IF;
END LOOP;
AERTEXT:=substr(AER_CLOB,1,4000);
RETURN(AERTEXT);
END;
将此增加到 4000 以上的重要性是提取完整的文本数据。如果 DB 列包含超过 4K 的字符,则它不起作用。
我是这样称呼它的:
select AER_ID,GET_AER_TEXT5(AER_ID,at,field_id,'001')
from AER a,AER_TEXT AT
where AT.field_ID=12345 and a.aer_id=at.aer_id;
您能否建议如何摆脱这个问题。
【问题讨论】:
-
还显示整个错误堆栈,以及函数是如何被调用的。如果您想要整个文本,为什么要返回 VARCHAR2 而不是 CLOB?
-
对不起,我已经编辑过了。
-
我将在 SAP 业务对象报告中使用它来根据我的客户要求调用少量数据。下面是我的查询。 select AER_ID,GET_AER_TEXT5(AER_ID,at,field_id,'001') from AER a,AER_TEXT AT where AT.field_ID=12345 and a.aer_id=at.aer_id;
-
感谢您使用文本,但您现在需要对其进行格式化。这将有所帮助:stackoverflow.com/help/formatting
标签: sql oracle plsql oracle10g clob