系统环境: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我是这样测试的:先在oracle端用常量运行:
call fox.Save_work_Record('1-USER02-PPJL-20120401083030611',
to_date('2012-03-31','yyyy/mm/dd'),15,'我的处理经过');
插入成功。
删除插入的记录后,在vfp端运行:
lnReturn=SQLEXEC(lreturn,"call fox.Save_work_Record('1-USER02-PPJL;
-20120401083030611',to_date('2012-03-31','yyyy/mm/dd'),15,'我的处理经过')")
结果显示添加成功。但是出现了字符集的问题,英文和数字部分正常,中文部分显示乱码。
oracle字符集NLS_LANG=AMERICAN_AMERICA.US7ASCII
vfp是汉化版的
问题:整个表如何导入?字符集的问题怎么解决?
谢谢!
&&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我是这样测试的:先在oracle端用常量运行:
call fox.Save_work_Record('1-USER02-PPJL-20120401083030611',
to_date('2012-03-31','yyyy/mm/dd'),15,'我的处理经过');
插入成功。
删除插入的记录后,在vfp端运行:
lnReturn=SQLEXEC(lreturn,"call fox.Save_work_Record('1-USER02-PPJL;
-20120401083030611',to_date('2012-03-31','yyyy/mm/dd'),15,'我的处理经过')")
结果显示添加成功。但是出现了字符集的问题,英文和数字部分正常,中文部分显示乱码。
oracle字符集NLS_LANG=AMERICAN_AMERICA.US7ASCII
vfp是汉化版的
问题:整个表如何导入?字符集的问题怎么解决?
谢谢!
那么能不能用to_char将客户端的字符转换成oracle服务器能认识的AMERICAN_AMERICA.US7ASCII
字符集?
在oracle端可以运行,但转换失败。
没人回答吗?