当前位置: 首页 > 知识库问答 >
问题:

向clob变量赋值超过32K字符串时出现数值或值错误

耿俊
2023-03-14

当我尝试做以下操作时,我得到了数字或值错误。我正试图将40000长度的字符串赋给一个clob变量,它应该允许我对吗?

我是一个循环,如果试图追加字符串块,那么没有问题,但如果我试图一次性分配“超过32K的字符串”,那么就会出现错误。

我有一个要求,我必须为一个带有clob输入参数的过程分配32K+字符串。

SET SERVEROUTPUT ON

DECLARE

my_var CLOB;

BEGIN

my_var:=RPAD('*',40000,'*');

DBMS_OUTPUT.PUt_LINE(length(my_var));

EXCEPTION
WHEN OTHERS THEN
DBMS_OUTPUT.PUt_LINE(SQLCODE||' '||SQLERRM);

END;

共有1个答案

吴缪文
2023-03-14

设身处地为PL/SQL运行时着想。它必须处理分配

my_var := rpad('*', 40000, '*')

my_var声明为clob。RHS怎么样?首先,必须计算RHS,当运行时这样做时,它无法知道预期的结果是clob。第一个参数是'*',它是varchar2,而不是clob。那么,rpad的返回值应该是varchar2。这就是为什么你会得到错误。

我们怎么解决这个问题?很容易。您需要给函数一个clob作为第一个参数。像这样:

my_var := rpad(to_clob('*'), 40000, '*')
SQL> declare x clob; begin x := rpad(to_clob('*'), 40000, '*');
  2  dbms_output.put_line(length(x)); end;
  3  /

40000

PL/SQL procedure successfully completed.
 类似资料:
  • 正如您所知,由于Oracle11g不支持json,我使用CLOB创建json数据,因为varchar2(32767)大小,但此时我得到了ORA-06502:PL/SQL:numeric或value错误。同时,数据大小为68075。为什么我得到错误,尽管Clob是支持4 gb的数据?

  • = 赋值操作符(它的左右两边不能有空白符) 不要搞混了 = 和 -eq,-eq 是比赋值操作更高级的测试。注意:等于号(=)根据环境的不同它可能是赋值操作符也可能是一个测试操作符。 例子 4-2. 简单的变量赋值 1 #!/bin/bash 2 # 裸变量 3 4 echo 5 6 # 什么时候变量是“裸”的?比如说,变量名前面没有$? 7 #当变量被赋值

  • 问题内容: Java中的字符串构建使我感到困惑。我讨厌做这样的事情: 或者,使用StringBuilder,如下所示: 我肯定会丢失一些东西。有更好的方法。就像是: 代替: 做: 要么: 问题答案: 如果您使用的是Java 5或更高版本,则可以使用: 有关详细信息,请参见。

  • 本文向大家介绍详解PHP变量传值赋值和引用赋值变量销毁,包括了详解PHP变量传值赋值和引用赋值变量销毁的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了PHP变量传值赋值和引用赋值变量销毁的具体代码,供大家参考,具体内容如下 php中,上面的代码,变量是怎么存放的呢? 上面的代码变动下,将变量b赋值给变量a,会发生什么? 问题来了,$a = $b,那么是将变量a的指针指向了变量b指针所

  • 通过函数构造函数创建变量时它们似乎被声明为VAL。由于VAL不能重新赋值(出于某些原因,我需要这样做),我想知道是否有办法在函数之前的一行代码中将变量声明为var,然后通过函数赋值。 请记住,我昨天才开始学习静态编程语言。我对所有替代方案都持开放态度。 公共趣味单打(enemyhealth:Int,enemyattack:Int,enemyname:String) 当我尝试重新分配敌人的健康时,我