表和存储过程
create table ttest
(
t1 varchar2(30) not null,
t2 varchar2(30) not null,
t3 date not null,
t4 NUMBER(4,2) not null
);
create or replace procedure PRO_test(
  v_xh      in    VARCHAR2,  
  v_xh2     in    varchar2,  
  v_xh3     in    date,
  v_xh4     in    number,
  v_photo1  in   blob,  --第一张图片  
  v_res     out  varchar2    
) is
begin
  v_res:='0'; 
  insert into ttest(t4,t1,t2,t3) values(v_xh4,v_xh,v_xh2,v_xh3);
  commit;
end PRO_test;
/
delphi调用存储过程:
  SP_wchufa.Parameters.Clear;  SP_wchufa.Parameters.Add;
  SP_wchufa.Parameters[0].Name:='V_XH';
  SP_wchufa.Parameters[0].DataType:=ftString;
  SP_wchufa.Parameters[0].Direction:=pdinput;
  SP_wchufa.Parameters[0].Size:=2000;  SP_wchufa.Parameters.Add;
  SP_wchufa.Parameters[1].Name:='V_xh2';
  SP_wchufa.Parameters[1].DataType:=ftString;
  SP_wchufa.Parameters[1].Direction:=pdinput;
  SP_wchufa.Parameters[1].Size:=2000;    SP_wchufa.Parameters.Add;
  SP_wchufa.Parameters[2].Name:='V_xh3';
  SP_wchufa.Parameters[2].DataType:=ftdate;
  SP_wchufa.Parameters[2].Direction:=pdinput;
  SP_wchufa.Parameters[2].Size:=2000;    SP_wchufa.Parameters.Add;
  SP_wchufa.Parameters[3].Name:='V_xh4';
  SP_wchufa.Parameters[3].DataType:=ftBCD;
  SP_wchufa.Parameters[3].Direction:=pdinput;
  SP_wchufa.Parameters[3].Precision:=4;
  SP_wchufa.Parameters[3].Size:=0;  SP_wchufa.Parameters.Add;
  SP_wchufa.Parameters[4].Name:='V_PHOTO1';
  SP_wchufa.Parameters[4].DataType:=ftBlob;
  SP_wchufa.Parameters[4].Direction:=pdinput;
  SP_wchufa.Parameters[4].Size:=999;  SP_wchufa.Parameters.Add;
  SP_wchufa.Parameters[5].Name:='V_RES';
  SP_wchufa.Parameters[5].DataType:=ftString;
  SP_wchufa.Parameters[5].Direction:=pdoutput;
  SP_wchufa.Parameters[5].Size:=2000;  SP_wchufa.Parameters.ParamByName('V_XH').Value:='1234566666666666';
  SP_wchufa.Parameters.ParamByName('V_xh2').Value:='210';
  SP_wchufa.Parameters.ParamByName('V_xh3').Value:='2006-08-15 13:32:30';
  SP_wchufa.Parameters.ParamByName('V_xh4').Value:=4.2;
  SP_wchufa.Parameters.ParamByName('v_photo1').LoadFromFile('d:\pic\20060621194742-03-01-103.jpg',ftBlob);
  SP_wchufa.Prepared:=true;
  try
    SP_wchufa.ExecProc;
  finally
  end;
问题在哪里呀??试了两天也,就是blob参数过不去,如果没有blob参数存储过程是好用的。先谢谢了!

解决方案 »

  1.   

    没仔细看,可没看到你得表中有blog字段啊create table ttest
    (
    t1 varchar2(30) not null,
    t2 varchar2(30) not null,
    t3 date not null,
    t4 NUMBER(4,2) not null
    );
      

  2.   

    不知道oracle中是怎么回事,手边也没有oracle。
    不过commit;这一句,不知道oracle是否可以这样单独用。并且不明白,你表中没有这个blog得字段,在存储过程中添加这个干吗,就是好玩吗??你在表中添加一个这样得字段试试。另外就是注意一下你参数得顺序,因为如果你用 SP_wchufa.Parameters.Add;添加一个参数,那么这个参数是和存储过程得参数循序相对应得,并不是按照你得名字。
      

  3.   

    oracle的存储过程是允许这样的。我现在的问题是怎样能将一个blob参数传到oracle的存储过程中。
      

  4.   

    oracle 上改成:
    create table ttest
    (
    t1 varchar2(30) not null,
    t2 varchar2(30) not null,
    t3 date not null,
    t4 NUMBER(4,2) not null,
    t5 blob not null
    );
    create or replace procedure PRO_test(
      v_xh      in    VARCHAR2,  
      v_xh2     in    varchar2,  
      v_xh3     in    date,
      v_xh4     in    number,
      v_photo1  in   blob,  --第一张图片  
      v_res     out  varchar2    
    ) is
    begin
      v_res:='0'; 
      insert into ttest(t1,t2,t3,t4,t5) values(v_xh,v_xh2,v_xh3,v_xh4,v_photo1);
      commit;
    end PRO_test;
    /
    调用部分:
      SP_wchufa.ProcedureName:='PRO_test';
    //  sp_lock.ParamBindMode:=pbByName;// 存储过程参数列表
    // V_XH 序号 Varchar2(16) IN N
      SP_wchufa.Parameters.Clear;
    //  SP_wchufa.Refresh;
      SP_wchufa.Parameters.Add;
      SP_wchufa.Parameters[0].Name:='V_XH';
      SP_wchufa.Parameters[0].DataType:=ftString;
      SP_wchufa.Parameters[0].Direction:=pdinput;
      SP_wchufa.Parameters[0].Size:=2000;
    //V_FZJG 发证机关 Varchar2(8) IN N
      SP_wchufa.Parameters.Add;
      SP_wchufa.Parameters[1].Name:='V_xh2';
      SP_wchufa.Parameters[1].DataType:=ftString;
      SP_wchufa.Parameters[1].Direction:=pdinput;
      SP_wchufa.Parameters[1].Size:=2000;    SP_wchufa.Parameters.Add;
      SP_wchufa.Parameters[2].Name:='V_xh3';
      SP_wchufa.Parameters[2].DataType:=ftdate;
      SP_wchufa.Parameters[2].Direction:=pdinput;
      SP_wchufa.Parameters[2].Size:=2000;    SP_wchufa.Parameters.Add;
      SP_wchufa.Parameters[3].Name:='V_xh4';
      SP_wchufa.Parameters[3].DataType:=ftBCD;
      SP_wchufa.Parameters[3].Direction:=pdinput;
      SP_wchufa.Parameters[3].Precision:=4;
      SP_wchufa.Parameters[3].Size:=0;  SP_wchufa.Parameters.Add;
      SP_wchufa.Parameters[4].Name:='V_PHOTO1';
      SP_wchufa.Parameters[4].DataType:=ftBlob;
      SP_wchufa.Parameters[4].Direction:=pdinput;
    //  SP_wchufa.Parameters[4].Size:=100;  SP_wchufa.Parameters.Add;
      SP_wchufa.Parameters[5].Name:='V_RES';
      SP_wchufa.Parameters[5].DataType:=ftString;
      SP_wchufa.Parameters[5].Direction:=pdoutput;
      SP_wchufa.Parameters[5].Size:=2000;  SP_wchufa.Parameters.ParamByName('V_XH').Value:='1234566666666666';
      SP_wchufa.Parameters.ParamByName('V_xh2').Value:='210';
      SP_wchufa.Parameters.ParamByName('V_xh3').Value:='2006-08-15 13:32:30';
      SP_wchufa.Parameters.ParamByName('V_xh4').Value:=4.2;
      SP_wchufa.Parameters.ParamByName('v_photo1').LoadFromFile('d:\pic\20060621194742-03-01-103.JPG',ftBlob);
      SP_wchufa.Prepared:=true;
      try
        SP_wchufa.ExecProc;
      finally
        if SP_wchufa.Parameters.ParamByName('V_RES').Value<>0 then
        begin
          //失败处理
        end;
        SP_wchufa.Prepared:=false;
      end;
    问题是一样的,是参数设置部分的问题,还是delphi接口方面的问题?
      

  5.   

    你設置了blob的參數類型嗎
    應該設置參數類型