这是存储过程:
create or replace procedure sp_update_clob(
table_name in varchar2,
field_id in varchar2,
field_name in varchar2,
v_pos in number,
v_id in number,
v_clob in varchar2,
Result out integer)
is
lobloc clob;
c_clob varchar2(32767);
amt binary_integer;
pos binary_integer;
query_str varchar2(500);
begin
pos:=v_pos*32766+1;
amt := length(v_clob);
c_clob:=v_clob;
--insert
query_str :='select '||field_name||' from '||table_name||' where '||field_id||'= :id for update ';
--initialize buffer with data to be inserted or updated
EXECUTE IMMEDIATE query_str INTO lobloc USING v_id;
--from pos position, write 32766 varchar2 into lobloc
dbms_lob.write(lobloc, amt, pos, c_clob);
Result:=1;
commit;
exception
when others then
Result:=-1;
rollback;
end;
这是C#调用代码:
string mConn="data source=hndm;user id=hndmuser;password=hndmpass";//连接数据库 conn=new OracleConnection(mConn); cmd=conn.CreateCommand(); cmd.CommandText="sp_update_clob";//存储过程名 cmd.CommandType=CommandType.StoredProcedure;//声明调用存储过程 //存储过程的参数,paramin代表参数名,OracleType.VarChar代表参数类型,20代表参数的大小
OracleParameter param_in=cmd.Parameters.Add("table_name",OracleType.VarChar,20); param_in.Direction=ParameterDirection.Input;//代表参数的存储方式 param_in.Value="news"; OracleParameter param_in1=cmd.Parameters.Add("field_id",OracleType.VarChar,20); param_in1.Direction=ParameterDirection.Input; param_in1.Value="news_id"; OracleParameter param_in2=cmd.Parameters.Add("field_name",OracleType.VarChar,20); param_in2.Direction=ParameterDirection.Input; param_in2.Value="news_text"; OracleParameter param_in3=cmd.Parameters.Add("v_id",OracleType.Number,9); param_in3.Direction=ParameterDirection.Input; param_in3.Value=1; OracleParameter param_in4=cmd.Parameters.Add("v_pos",OracleType.Number,9); param_in4.Direction=ParameterDirection.Input; param_in4.Value=1;
OracleParameter param_in5=cmd.Parameters.Add("v_clob",OracleType.VarChar,20); param_in5.Direction=ParameterDirection.Input; param_in5.Value=this.richTextBox1.Text;
OracleParameter param_out=cmd.Parameters.Add("Result",OracleType.Number); param_out.Direction=ParameterDirection.Output;
conn.Open(); //执行存储过程 cmd.ExecuteNonQuery(); //返回参数的值
this.richTextBox1.Text="显示:"+param_out.Value.ToString();
conn.Close();
高手们帮我看看错在哪里!
create or replace procedure sp_update_clob(
table_name in varchar2,
field_id in varchar2,
field_name in varchar2,
v_pos in number,
v_id in number,
v_clob in varchar2,
Result out integer)
is
lobloc clob;
c_clob varchar2(32767);
amt binary_integer;
pos binary_integer;
query_str varchar2(500);
begin
pos:=v_pos*32766+1;
amt := length(v_clob);
c_clob:=v_clob;
--insert
query_str :='select '||field_name||' from '||table_name||' where '||field_id||'= :id for update ';
--initialize buffer with data to be inserted or updated
EXECUTE IMMEDIATE query_str INTO lobloc USING v_id;
--from pos position, write 32766 varchar2 into lobloc
dbms_lob.write(lobloc, amt, pos, c_clob);
Result:=1;
commit;
exception
when others then
Result:=-1;
rollback;
end;
这是C#调用代码:
string mConn="data source=hndm;user id=hndmuser;password=hndmpass";//连接数据库 conn=new OracleConnection(mConn); cmd=conn.CreateCommand(); cmd.CommandText="sp_update_clob";//存储过程名 cmd.CommandType=CommandType.StoredProcedure;//声明调用存储过程 //存储过程的参数,paramin代表参数名,OracleType.VarChar代表参数类型,20代表参数的大小
OracleParameter param_in=cmd.Parameters.Add("table_name",OracleType.VarChar,20); param_in.Direction=ParameterDirection.Input;//代表参数的存储方式 param_in.Value="news"; OracleParameter param_in1=cmd.Parameters.Add("field_id",OracleType.VarChar,20); param_in1.Direction=ParameterDirection.Input; param_in1.Value="news_id"; OracleParameter param_in2=cmd.Parameters.Add("field_name",OracleType.VarChar,20); param_in2.Direction=ParameterDirection.Input; param_in2.Value="news_text"; OracleParameter param_in3=cmd.Parameters.Add("v_id",OracleType.Number,9); param_in3.Direction=ParameterDirection.Input; param_in3.Value=1; OracleParameter param_in4=cmd.Parameters.Add("v_pos",OracleType.Number,9); param_in4.Direction=ParameterDirection.Input; param_in4.Value=1;
OracleParameter param_in5=cmd.Parameters.Add("v_clob",OracleType.VarChar,20); param_in5.Direction=ParameterDirection.Input; param_in5.Value=this.richTextBox1.Text;
OracleParameter param_out=cmd.Parameters.Add("Result",OracleType.Number); param_out.Direction=ParameterDirection.Output;
conn.Open(); //执行存储过程 cmd.ExecuteNonQuery(); //返回参数的值
this.richTextBox1.Text="显示:"+param_out.Value.ToString();
conn.Close();
高手们帮我看看错在哪里!
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货