我用的是 ODAC5.1,在对Oracle10g处理大字段,如BLOB时,一直报错。
错误描述如下:
ORA-00600:internal error code,arguments:[17147],[0xB730D8BC],[],[]
ORA-06502:PL/SQL:numeric or value error
ORA-06512:at line 3
以下是有关程序说明:
Oracle10g CREATE TABLE ODAC_BLOB (
ID NUMBER PRIMARY KEY,
Title VARCHAR2(30),
Pic BLOB
);CREATE OR REPLACE
PROCEDURE ODAC_BLOB_Insert (
p_ID NUMBER,
p_Title VARCHAR2,
p_Pic OUT BLOB
)
is
begin
INSERT INTO ODAC_BLOB(ID, Title, Pic)
VALUES (p_ID, p_Title, EMPTY_BLOB())
RETURNING Pic
INTO p_Pic;
end;Delphi7.0 程序片段: with OraStoredProc do begin
StoredProcName := 'ODAC_BLOB_Insert';
PrepareSQL; // receive parameters ParamByName('p_ID').AsInteger := 10;
ParamByName('p_Title').AsString := ExtractFileName(FileName); ParamByName('p_Pic').ParamType := ptInput; // to transfer Lob data to Oracle
ParamByName('p_Pic').AsOraBlob.LoadFromFile(FileName);
Execute;
end;
错误描述如下:
ORA-00600:internal error code,arguments:[17147],[0xB730D8BC],[],[]
ORA-06502:PL/SQL:numeric or value error
ORA-06512:at line 3
以下是有关程序说明:
Oracle10g CREATE TABLE ODAC_BLOB (
ID NUMBER PRIMARY KEY,
Title VARCHAR2(30),
Pic BLOB
);CREATE OR REPLACE
PROCEDURE ODAC_BLOB_Insert (
p_ID NUMBER,
p_Title VARCHAR2,
p_Pic OUT BLOB
)
is
begin
INSERT INTO ODAC_BLOB(ID, Title, Pic)
VALUES (p_ID, p_Title, EMPTY_BLOB())
RETURNING Pic
INTO p_Pic;
end;Delphi7.0 程序片段: with OraStoredProc do begin
StoredProcName := 'ODAC_BLOB_Insert';
PrepareSQL; // receive parameters ParamByName('p_ID').AsInteger := 10;
ParamByName('p_Title').AsString := ExtractFileName(FileName); ParamByName('p_Pic').ParamType := ptInput; // to transfer Lob data to Oracle
ParamByName('p_Pic').AsOraBlob.LoadFromFile(FileName);
Execute;
end;
解决方案 »
- 如何通过 服务名称 获取该进程是否为启动状态.????
- 动态创建TDATABASE后连接至数据库,为什么提示duplicate database name 'ZB'
- 自定义记录文件
- 怎样解决扑克游戏中的一些问题?
- 这个sql语句错在什么地方了??
- 高兴散分,今天收到MICROSOFT的T恤。顺便请大家帮我找个无限制的“几何画板”
- 第四次问ado问题,很急,星期一要交,谁能帮个忙呀
- 求救!
- Delphi 用odac连接数据库出错。
- 奇怪!所有MDIChildForm关闭后,MDIChildCount=1???
- 急需D2005中的bpl文件
- Delphi如何调用无返回值(Void类型)的dll函数?
//一个参数有返回值function TStoreProOCI.GetOneParam(FuncName: string; Param, Value: string):
string;var
OraStoredProc1 : TOraStoredProc;
Str : string;begin
OraStoredProc1 := TOraStoredProc.Create(nil);
try
OraStoredProc1.Session := FMyComDBConn.FSession;
OraStoredProc1.SQL.Add('begin');
Str := Format(':RESULT :=%s(:%s);', [FuncName, Param]);
OraStoredProc1.SQL.Add('end;'); OraStoredProc1.StoredProcName := FuncName;
OraStoredProc1.Params.CreateParam(ftString, 'Result', ptResult);
OraStoredProc1.Params.CreateParam(ftString, Param, ptInput); OraStoredProc1.ParamByName(Param).Value := Value; OraStoredProc1.Execute;
Result := OraStoredProc1.ParamByName('Result').AsString;
OraStoredProc1.Close; finally
OraStoredProc1.Free;
end;
end;
当Result返回值,太长了,如超过8000,就会出现ORA-06502:PL/SQL:numeric or value error
ORA-06512,字符缓冲太小buffer too small
修改
OraStoredProc1.Params.CreateParam(ftString, 'Result', ptResult);
改为 OraStoredProc1.Params.CreateParam(ftMemo, 'Result', ptResult);
解决问题