Я пытаюсь создать динамическую строку sql. Когда я пишу этотПроблема в конкатенации строки в PLSQL
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» в предыдущем и без пробела во втором. Почему это происходит?
Я подсчитал 48 символов, но, возможно, вы могли бы увеличить длину update_statement и посмотреть, как вы справляетесь. – AntDC
Я пробовал ваш код и получил ошибку: 'ORA-06502: PL/SQL: числовая или значащая ошибка: буфер символьной строки слишком мал ORA-06512: в строке 6' ... так ... varchar (50) - тоже маленький .. увеличьте его до 250 решает вашу проблему – are
Спасибо всем !!! –