ORA-01461解決過程
create table test (a varchar2(1));
declare
v_a varchar2(5000):=lpad('a',5000,'a');
begin
insert into test values(substr(v_a,1,1));
end;
ORA-01461: can bind a LONG value only for insert into a LONG column
ORA-06512: at line 4
而如果這樣寫就對了
declare
v_a varchar2(5000):=lpad('a',5000,'a');
v_b varchar2(1):=substr(v_a,1,1);
begin
insert into test values(v_b);
end;
說明問題出在執行substr的時候,再改下
declare
v_a varchar2(4000):=lpad('a',4000,'a');
begin
insert into test values(substr(v_a,1,1));
end;
可以成功執行。
總結:在PL/SQL中varchar2最大可支援32767位元組;在SQL中varchar2最大可支援4000位元組,insert時如果宣告的變數長度超過了sql中型別長度,就會觸發ORA-01461錯誤,所以在插入之前截斷字元到符合要求的長度即可。從以上例子可看出,必需在插入之前對字串進行擷取,不能在插入時才對字元進行擷取。
這應該是由於pl/sql引擎在編譯時對變數長度的判斷先於substr進行..
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10314474/viewspace-677557/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- ORA-01461的解決過程~~
- kettle 報ORA-01461 解決辦法
- crontab失敗的解決過程
- 一個lua問題解決過程
- 一個 ExpressionChangedAfterItHasBeenCheckedError 錯誤的解決過程ExpressError
- ORA-2049錯誤解決過程
- ora-01536的解決過程
- TNS-12500解決過程(zt)
- munium學習過程中問題解決
- 記錄一個前端bug的解決過程前端
- Oracle 編譯儲存過程卡死解決方法Oracle編譯儲存過程
- 分享:MySQL資料庫崩潰解決過程MySql資料庫
- 【故障診斷】cr塊slot notfound解決過程
- 安裝sysbench過程報錯,解決辦法
- enq: HW - contention診斷及解決過程ENQ
- oracle儲存過程!解決網友問題Oracle儲存過程
- Data Pump Import速度問題之解決過程Import
- httpd使用systemctl啟動超時解決過程httpd
- 儲存過程效能低的解決方法之一儲存過程
- 一次線上問題的排查解決過程
- 一次sqlldr匯入慢的解決過程SQL
- 伺服器硬碟掉了兩塊的解決過程伺服器硬碟
- Oracle儲存過程編譯卡死的解決方法Oracle儲存過程編譯
- DataGuard之switchover_status狀態not allowed解決過程
- ORA-600(17069)錯誤的解決過程
- MapReduce過程詳解
- 運維必備-解決鎖問題的全過程運維
- 記一次 Composer 問題的解決過程!!
- tensorflow安裝使用過程錯誤及解決方法
- 應用儲存過程執行報錯解決方案儲存過程
- sql server資料庫附加錯誤的解決過程SQLServer資料庫
- 用wrap加密一個package異常的解決過程加密Package
- Windows 7安裝過程當機的解決辦法Windows
- 【mysql】配置MySQL,解決安裝過程中的問題MySql
- ETL通用解決方案---oracle+儲存過程 實現Oracle儲存過程
- Java 記憶體洩露的理解與解決過程Java記憶體洩露
- 一次library cache pin故障的解決過程
- Linux使用過程中常見問題及其解決方法Linux