我VC++中调用ORACLE的存储过程,其中有句创建临时表的SQL不能执行,但用VB调用都正确,为什么???
VC中如何调用才对(以前中SQL SERVER的都能,到底有什么差别)??????
create or replace procedure XXXXX
(
vvAcctId in integer,
vvAcctCode in varchar,
vvDirect in integer,
vvStartDay in varchar,
vvEndDay in varchar,
vvTableName out varchar /*临时表名*/
)
as
vvBalance number(16,2);
vvBalanceOrig number(16,2);
vvBeginBalance number(16,2);
vvBeginBalanceOrig number(16,2);
vvtempCredits number(16,2);
vvtempCreditsOrig number(16,2);
vvtempDebts number(16,2);
vvtempDebtsOrig number(16,2);
vvstrSQL varchar2(4000);
vvtempTable varchar2(40);
vvtempTableName varchar2(40);
vRect number(20);
acur integer;
ignore integer;
--vvTableName varchar2(100); /*临时表名*/
begin
select to_char(dbms_random.random) into vvtempTableName from dual; vvtempTableName:='CNRjz'||to_char(substr(vvtempTableName,2,length(vvtempTableName)-1));
select count(*) into vRect from all_tables where table_name=upper(vvtempTableName);
if vRect >0 then
vvstrSQL:='drop table '||vvtempTableName;
execute immediate vvstrSQL;
end if;
vvstrSQL:='Create table '||vvtempTableName||'
(
AcctID number(4,0),
AcctCode varchar(20),
HappenDay Date,
VoucherNo varchar2(20) default '''',
Description varchar2(80) default '''',
Credits number(16,2) default 0,
CreditsOrig number(16,2) default 0,
Debts number(16,2) default 0,
DebtsOrig number(16,2) default 0,
Balance number(16,2) default 0,
BalanceOrig number(16,2) default 0,
IsCalBalance char(1) default ''y'',
VoucherTypeId varchar2(20) default '''',
VoucherOrder number(20,0) default 0
)';
acur := dbms_sql.open_cursor;
DBMS_SQL.PARSE(acur, vvstrSQL,dbms_sql.native);
ignore :=dbms_sql.execute(acur);
DBMS_SQL.close_cursor(acur);
.........
end;
VC中如何调用才对(以前中SQL SERVER的都能,到底有什么差别)??????
create or replace procedure XXXXX
(
vvAcctId in integer,
vvAcctCode in varchar,
vvDirect in integer,
vvStartDay in varchar,
vvEndDay in varchar,
vvTableName out varchar /*临时表名*/
)
as
vvBalance number(16,2);
vvBalanceOrig number(16,2);
vvBeginBalance number(16,2);
vvBeginBalanceOrig number(16,2);
vvtempCredits number(16,2);
vvtempCreditsOrig number(16,2);
vvtempDebts number(16,2);
vvtempDebtsOrig number(16,2);
vvstrSQL varchar2(4000);
vvtempTable varchar2(40);
vvtempTableName varchar2(40);
vRect number(20);
acur integer;
ignore integer;
--vvTableName varchar2(100); /*临时表名*/
begin
select to_char(dbms_random.random) into vvtempTableName from dual; vvtempTableName:='CNRjz'||to_char(substr(vvtempTableName,2,length(vvtempTableName)-1));
select count(*) into vRect from all_tables where table_name=upper(vvtempTableName);
if vRect >0 then
vvstrSQL:='drop table '||vvtempTableName;
execute immediate vvstrSQL;
end if;
vvstrSQL:='Create table '||vvtempTableName||'
(
AcctID number(4,0),
AcctCode varchar(20),
HappenDay Date,
VoucherNo varchar2(20) default '''',
Description varchar2(80) default '''',
Credits number(16,2) default 0,
CreditsOrig number(16,2) default 0,
Debts number(16,2) default 0,
DebtsOrig number(16,2) default 0,
Balance number(16,2) default 0,
BalanceOrig number(16,2) default 0,
IsCalBalance char(1) default ''y'',
VoucherTypeId varchar2(20) default '''',
VoucherOrder number(20,0) default 0
)';
acur := dbms_sql.open_cursor;
DBMS_SQL.PARSE(acur, vvstrSQL,dbms_sql.native);
ignore :=dbms_sql.execute(acur);
DBMS_SQL.close_cursor(acur);
.........
end;
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货