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;
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;
你能告诉我如何解决这个问题吗?
在Oracle12c之前,Oracle只允许在SQL上下文中的varchar2值中包含4000字节。在PL/SQL中允许使用32K,因此,即使substrng获得前4001个字符,您的函数也是可以的;但前提是从PL/SQL调用它。当您尝试从SQL调用它时:
select AER_ID,GET_AER_TEXT5(AER_ID,at,field_id,'001') ...
...您试图为return语句中的隐式SQL列分配一个4001字符的值,这导致了您所看到的错误。
您可以将SAP调用更改为使用PL/SQL上下文和绑定变量来获取返回值,但仍将限制在32K;或者更改函数以将值保持为CLOB,这使得函数变得毫无意义,因为您只能从表中获取值。我不熟悉SAP,所以我不太确定您最终会如何编写这两种方法。
我得到了 ORA-06502:PL/SQL:以下代码中出现数值或值错误:
我在执行触发器时遇到以下错误: 请说明问题的原因。 编辑 数据类型:
我实现了一个返回clob数据类型的函数,我希望在DBMS输出中打印结果。不幸的是,我得到了ORA-06502:PL/SQL:numeric或value错误,我认为这是由于dbms_output的大小造成的。 这是密码。 这里有一些东西可以帮助您理解这个问题 1)添加了以下内容来设置缓冲区的大小不受限制,但不起作用… 3)我可以通过执行以下操作来解决这个问题,但我认为这不是一个好的解决方案,因为它执
有没有办法在mybatis结果映射中指定一个字符串最多应包含20个字符?或者如何设置精度,如数字(4,2)? 例如,我有一个如下所示的结果图: 我可以将int的位数限制为只有1,在浮点数上的“.”后面显示N个元素,或者将字符串大小限制为一定的数字吗? 我正在处理的视图具有以下列结构: 编辑1:每当我试图调用存储过程在此视图中添加新项时...我会得到这个错误: 我创建了一个用于测试的类,该类尝试调用
在函数中,我在这一行上有ORA-06502错误: 我看这里没有任何转换问题/完全困惑/