首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > VFP >

vfp怎么调用oracle存储过程实现数据导入

2013-03-26 
vfp如何调用oracle存储过程实现数据导入系统环境:sever2003 sp2 oracle11g,客户端xp sp3、vfp9&&vfp表f_wor

vfp如何调用oracle存储过程实现数据导入
系统环境:sever2003 sp2 oracle11g,客户端xp sp3、vfp9
&&vfp表f_work_reco
f_work_reco_ID C(50),
f_work_reco_DATE D,
f_quantity N,
f_Content M
&&oracle表
create table work_reco(SERIAL_NO,
  work_reco_ID varchar(50),
  work_reco_DATE date,
  quantity number, 
  Content varchar(2000))
&&vfp用ODBC连接odbcdrive=oracle in orahome90(连接正常)
目标:调用oracle数据库存储过程,将vfp表f_work_reco的所有记录导入oracle库。
&&oracle存储过程(禁止修改):
CREATE OR REPLACE PROCEDURE fox.Save_work_Record
(
p_work_reco_ID varchar2,
  p_work_reco_DATE date,
  p_quantity number,
  p_Content varchar2
  )
Is
  pct number(2);
  v_RID varchar(50);
  v_ProcessRecord varchar(2000);
  v_BStr varchar(100);
BEGIN
  Select Count(work_reco_ID) into pct from work_reco where 

work_reco_ID=p_work_reco_ID;
  v_ProcessRecord:='工作记录:';
  v_ProcessRecord:=v_ProcessRecord||'开始时间:'||to_char(p_work_reco_DATE  

,'YYYY-MM-DD')||';';
  v_ProcessRecord:=v_ProcessRecord||'次数:'||p_quantity||'次'||';';  
  v_ProcessRecord:=v_ProcessRecord||'处理经过:'||p_Content||';';
  if pct=0 then
  INSERT Into work_reco(SERIAL_NO,work_reco_ID,work_reco_DATE,quantity,

Content)
  VALUES
  (seq_work_reco_regist.Nextval,p_work_reco_ID, 

p_work_reco_DATE,p_quantity,p_Content);&&SERIAL_NO由系统生成
  /**进入到另一个记录**/
Select BEFORE_STR into v_BStr from SANATORIUM_CATELOG where tiaojian;&&从单位信息表获取编号前缀
  v_Bstr:=v_Bstr||'-PRJL-';
  AutoNo(v_Bstr,v_RID,50);&&调用一个自动编号的存储过程
  commit;
  Save_Process_RECORD (v_RID,v_CareRecord);&&写入
  commit;
else
  Update work_reco Set
  work_reco_DATE=p_work_reco_DATE,
  Content=p_Content,
  BEGIN_DATE=p_BEGIN_DATE,
  quantity=p_quantity
  where work_reco_ID=p_work_reco_ID;
  Save_Process_RECORD (v_RID,v_CareRecord);
 commit;
end if;
end Save_work_Record

[解决办法]

探讨
我的思路和豆三老师的相似:从vfp表逐条读取记录,连接后逐条写入。不知道怎么实现。

[解决办法]
以下是我写的部分代码,你可以换成你的表,对应的字段进行操作,

Local loConnection
loConnection = CreateObject("adodb.connection")

With loConnection
*--- Note using OLE-DB connection instead of a DSN

lcConnectString = "Provider=MSDAORA.1;Password=manager;" + ;
"User ID=system;Data Source=ORCL"
.ConnectionString = lcConnectString
.Open
Endwith

str_pic=CAST(FILETOSTR("r:\1.jpg") as w)
str_pic_len=LEN(str_pic)

loCommand = CreateObject("adodb.command")


With loCommand
*-- Execution string from
.CommandText = "Save_work_Record"&&这是里是oracle中的存储过程
.ActiveConnection = loConnection
.CommandType = 4 &&这里表示执行的操作是进行存储过程调用
Endwith

*--- Input Parameter
loTableParameter = CreateObject("adodb.parameter")
With loTableParameter
.Name = "id"
.Type= 3
.Direction = 1 && adParamInput
.Size =5
.Value = 10
Endwith

loCommand.Parameters.Append(loTableParameter)


para_rq = CreateObject("adodb.parameter")
WITH para_rq
.Name="rq"
.Type= 135 && adDBTimeStamp


.Direction=1
.Size=18
.Value=DATETIME()
ENDWITH

loCommand.Parameters.Append(para_rq)

para_lr = CreateObject("adodb.parameter")
WITH para_lr
.Name="lr"
.Type= 200
.Direction=1
.Size=18
.Value="您好啊"
ENDWITH

loCommand.Parameters.Append(para_lr)




para_pic = CreateObject("adodb.parameter")
WITH para_pic
.Name="pic"
.Type= 204
.Direction=1
.Size=str_pic_len
ENDWITH

loCommand.Parameters.Append(para_pic)

loCommand.Parameters("pic").value=str_pic


loCommand.Execute()

loadostream.close


loConnection.close

我的异常网推荐解决方案:oracle存储过程,http://www.myexception.cn/oracle-develop/177537.html

热点排行