Oracle
嘗試執行動態 pl/sql 時遇到錯誤
希望你做得好我是 PL/SQL 的新手,我正在嘗試編寫動態 PL/SQL。到目前為止我寫的是:
declare sql_stmt varchar2(100); v_student_id number := 1; v_new_stname varchar2(50); begin sql_stmt := 'update student set student_name = ''pantea'' where student_id :1 ' || 'returning student_name into :2'; execute immediate sql_stmt using v_student_id returning into v_new_stname; dbms_output.put_line('New student name is :' || v_new_stname); end;
當我想執行程式碼時,我看到了這個錯誤:
ORA-06502:Numeric or value error:Character string buffer too small.
我 80% 確定問題可能出在這部分程式碼中
set student_name = ''pantea''
但我不知道如何解決它,我也無法在 oracle 書籍上找到它,我知道如何在 T/SQL 中處理這個問題,但不知道如何在 PL/SQL 中處理這個問題。
您忘記了 WHERE 子句的比較運算符
如果您真的想使用動態 SQL(這樣的簡單 UPDATE 語句不需要),那麼您還應該將所有值作為參數傳遞,而不僅僅是學生 ID。
declare sql_stmt varchar2(100); v_student_id number := 1; v_name varchar2(20) := 'pantea'; v_new_stname varchar2(50); begin sql_stmt := 'update student set student_name = :1 '|| 'where student_id = :2 '|| 'returning student_name into :3'; execute immediate sql_stmt using v_name, v_student_id returning into v_new_stname; dbms_output.put_line('New student name is: ' || v_new_stname); end; /
當您在多行上繼續字元串文字(常量)時,似乎會發生“字元串緩衝區太小”。因此,最好打開和關閉每行上的字元串常量並將它們連接起來,
||
而不是像您那樣在字元串中嵌入新行。