Oracle PLSQL中连接字符串时出现问题

Oracle PLSQL中连接字符串时出现问题,oracle,plsql,Oracle,Plsql,我正在尝试创建一个动态sql字符串。当我写这个的时候 DECLARE update_column VARCHAR2(20) := 'RED'; update_statement VARCHAR2(50); BEGIN -- update_column := 'RED'; update_statement := 'UPDATE HEARTBEAT_REPORTING_DAILY SET '|| UPDATE_COLUMN || ' = ' || UPDATE_

我正在尝试创建一个动态sql字符串。当我写这个的时候

DECLARE
    update_column VARCHAR2(20) := 'RED';
    update_statement VARCHAR2(50);

BEGIN
 -- update_column := 'RED';
    update_statement := 'UPDATE HEARTBEAT_REPORTING_DAILY SET '|| 
    UPDATE_COLUMN || ' = ' || UPDATE_COLUMN || ' + 20';   
    DBMS_OUTPUT.PUT_LINE(update_statement);
END;
我得到这个错误

Error starting at line 3 in command:
DECLARE
update_column VARCHAR2(20) := 'RED';
update_statement VARCHAR2(50);
BEGIN
    update_statement := 'UPDATE HEARTBEAT_REPORTING_DAILY SET '|| 
    UPDATE_COLUMN || ' = ' || UPDATE_COLUMN || ' + 20';
    DBMS_OUTPUT.PUT_LINE(update_statement);
END;
Error report:
ORA-06502: PL/SQL: numeric or value error
ORA-06512: at line 5
06502. 00000 -  "PL/SQL: numeric or value error%s"
*Cause:    
*Action:
但当我这么做的时候

DECLARE
    update_column VARCHAR2(20) := 'RED';
    update_statement VARCHAR2(50);

BEGIN
 -- update_column := 'RED';
    update_statement := 'UPDATE HEARTBEAT_REPORTING_DAILY SET '|| 
    UPDATE_COLUMN || ' = ' || UPDATE_COLUMN ||' +20';   
    DBMS_OUTPUT.PUT_LINE(update_statement);
END;
它运行得很好。这是输出

UPDATE HEARTBEAT_REPORTING_DAILY SET RED = RED +20

请注意,前面的“+”和“20”之间有一个空格,而第二个空格中没有空格。为什么会发生这种情况?

在第一种情况下,字符串长度为51个字符,不适合
VARCHAR2(50)
变量

在第二种情况下,“20”之前的空格较少。因此,字符串只有50个字符长,适合

将变量增加到适当的长度:

update_statement VARCHAR2(200);

在第一种情况下,字符串长度为51个字符,不适合
VARCHAR2(50)
变量

在第二种情况下,“20”之前的空格较少。因此,字符串只有50个字符长,适合

将变量增加到适当的长度:

update_statement VARCHAR2(200);
update_语句:='updateheartbeat_REPORTING_DAILY SET'|
更新列| |'='| |更新列| |'+20';
上行使update_语句大小为51,但您已将update_语句指定为50。这就是原因

update_语句:='updateheartbeat_REPORTING_DAILY SET'|
更新列| |'='| |更新列| |'+20';
在这种情况下,它的大小正好是50,所以它可以接受。

update\u语句:='updateheartbeat\u REPORTING\u DAILY SET'|
更新列| |'='| |更新列| |'+20';
上行使update_语句大小为51,但您已将update_语句指定为50。这就是原因

update_语句:='updateheartbeat_REPORTING_DAILY SET'|
更新列| |'='| |更新列| |'+20';

在这种情况下,它的大小正好是50,所以它可以接受。

我计算了48个字符,但也许你可以增加update_语句的长度,看看你的进展如何。我尝试了你的代码,得到了错误:
ORA-06502:PL/SQL:numeric或value错误:字符串缓冲区太小ORA-06512:在第6行
。。。所以varchar(50)-太小。。将其增加到250可解决您的问题我计算了48个字符,但也许您可以增加update_语句的长度,看看效果如何。我尝试了您的代码,但出现了错误:
ORA-06502:PL/SQL:numeric or value error:character string buffer太小ORA-06512:在第6行
。。。所以varchar(50)-太小。。将其增加到250可以解决您的问题