关于调用Oracle存储过程时发生“BCD Overflow”错误的处理
生活随笔
收集整理的這篇文章主要介紹了
关于调用Oracle存储过程时发生“BCD Overflow”错误的处理
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
筆者最近在使用TSQLStoredProc調用Oracle存儲過程時發現,即使存儲過程體為空時,都會發生 BCD Overflow 錯誤,該表部分定義如下:
PLANE_ALL_PARAMETER表:
在存儲過程的參數表中,做如下定義:
procedure update_plane_model(
???ModelID in PLANE_ALL_PARAMETER.PLANE_MODEL_ID%type,
???NaturalFlyWeight in PLANE_ALL_PARAMETER.NATURAL_FLY_WEIGHT%type,
???NoLoadWeight in PLANE_ALL_PARAMETER.NOLOAD_WEIGHT%type,
???MaxFuelWeight in PLANE_ALL_PARAMETER.MAX_FUEL_WEIGHT%type,
???……
);
并且在設置參數時使用如下方式:
ParamByName('NaturalFlyWeight').AsFloat :=? PlaneModelInfo^.NATURAL_FLY_WEIGHT ;
??? ParamByName('NoLoadWeight').AsFloat := PlaneModelInfo^.NOLOAD_WEIGHT;
??? ParamByName('MaxFuelWeight').AsFloat := PlaneModelInfo^.MAX_FUEL_WEIGHT;
這樣在調用該存儲過程時就會發生此錯誤,筆者發現如果使用AsBCD方式賦值,而不是使用AsFloat就可以避免發生 BCD Overflow 錯誤。
ParamByName('NaturalFlyWeight').AsBCD :=? PlaneModelInfo^.NATURAL_FLY_WEIGHT ;
??? ParamByName('NoLoadWeight').AsBCD := PlaneModelInfo^.NOLOAD_WEIGHT;
??? ParamByName('MaxFuelWeight').AsBCD := PlaneModelInfo^.MAX_FUEL_WEIGHT;
看來dbExpress雖好,但也是問題多,估計在SQL Server上不會存在這樣的問題,不知道Sysbase和DB2上有沒有,大家可以試試!
PLANE_ALL_PARAMETER表:
| 字段名 | 數據類型 |
| PLANE_MODEL_ID | NUMBER |
| NATURAL_FLY_WEIGHT | ?FLOAT |
| NOLOAD_WEIGHT | FLOAT |
| MAX_FUEL_WEIGHT | FLOAT |
| …… | …… |
在存儲過程的參數表中,做如下定義:
procedure update_plane_model(
???ModelID in PLANE_ALL_PARAMETER.PLANE_MODEL_ID%type,
???NaturalFlyWeight in PLANE_ALL_PARAMETER.NATURAL_FLY_WEIGHT%type,
???NoLoadWeight in PLANE_ALL_PARAMETER.NOLOAD_WEIGHT%type,
???MaxFuelWeight in PLANE_ALL_PARAMETER.MAX_FUEL_WEIGHT%type,
???……
);
并且在設置參數時使用如下方式:
ParamByName('NaturalFlyWeight').AsFloat :=? PlaneModelInfo^.NATURAL_FLY_WEIGHT ;
??? ParamByName('NoLoadWeight').AsFloat := PlaneModelInfo^.NOLOAD_WEIGHT;
??? ParamByName('MaxFuelWeight').AsFloat := PlaneModelInfo^.MAX_FUEL_WEIGHT;
這樣在調用該存儲過程時就會發生此錯誤,筆者發現如果使用AsBCD方式賦值,而不是使用AsFloat就可以避免發生 BCD Overflow 錯誤。
ParamByName('NaturalFlyWeight').AsBCD :=? PlaneModelInfo^.NATURAL_FLY_WEIGHT ;
??? ParamByName('NoLoadWeight').AsBCD := PlaneModelInfo^.NOLOAD_WEIGHT;
??? ParamByName('MaxFuelWeight').AsBCD := PlaneModelInfo^.MAX_FUEL_WEIGHT;
看來dbExpress雖好,但也是問題多,估計在SQL Server上不會存在這樣的問題,不知道Sysbase和DB2上有沒有,大家可以試試!
轉載于:https://www.cnblogs.com/heqing/archive/2007/01/25/630034.html
總結
以上是生活随笔為你收集整理的关于调用Oracle存储过程时发生“BCD Overflow”错误的处理的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Python的bool类型
- 下一篇: 数据结构与算法——排序