环境:
系统: Compaq Tru64 UNIX V5.1
ORACLE: 7.x
开发语言:c++问题描述:数据库中存储过程的描述:--存储过程的功能是将varchar2型的变量插到表中字段,含义为日期,字段为8位的VARCHAR2型(NOT DATE)
create procedure insert_table
( var_value in varchar2 )is
begin
insert into tblA
(
date --tblA中colA字段为varchar2(8)
)values
(
var_value
);
end;
\//C++代码中的调用
//int Func(const char * strValue)
{
EXEC SQL BEGIN DECLARE SECTION ;
long lValue;
EXEC SQL END DECLARE SECTION ;
lValue = atol(strValue);
EXEC SQL EXECUTE
BEGIN
insert_table(lValue);
end;
END-EXEC;
return 0 ;
} 原本是打算用数组来存放这个变量,然后传递给存储过程中的VARCHAR参数.
但后来发现定义一个char [8+1](8位日期 + '\0')的数组在传给存储过程的时候报'1401 inserted value too large for column '的错误,
去掉'\0'的那一位后(char [8]),又报"1722 invalid number"的错误.
因为不能随意更改表结构,不能随意加长字段,在PROC程序里尝试了一下用LONG型来传值给varchar,虽然成功了----
但小弟有一事不明,oracle 7.X的proc编译器是怎么把LONG型转成VARCHAR的,因为在程序当中还有其他的地方也有这样的问题,就怕LONG的值大了以后,出现溢出\甚至传1个非负的数,插完表之后这个值变成了个负数.
系统: Compaq Tru64 UNIX V5.1
ORACLE: 7.x
开发语言:c++问题描述:数据库中存储过程的描述:--存储过程的功能是将varchar2型的变量插到表中字段,含义为日期,字段为8位的VARCHAR2型(NOT DATE)
create procedure insert_table
( var_value in varchar2 )is
begin
insert into tblA
(
date --tblA中colA字段为varchar2(8)
)values
(
var_value
);
end;
\//C++代码中的调用
//int Func(const char * strValue)
{
EXEC SQL BEGIN DECLARE SECTION ;
long lValue;
EXEC SQL END DECLARE SECTION ;
lValue = atol(strValue);
EXEC SQL EXECUTE
BEGIN
insert_table(lValue);
end;
END-EXEC;
return 0 ;
} 原本是打算用数组来存放这个变量,然后传递给存储过程中的VARCHAR参数.
但后来发现定义一个char [8+1](8位日期 + '\0')的数组在传给存储过程的时候报'1401 inserted value too large for column '的错误,
去掉'\0'的那一位后(char [8]),又报"1722 invalid number"的错误.
因为不能随意更改表结构,不能随意加长字段,在PROC程序里尝试了一下用LONG型来传值给varchar,虽然成功了----
但小弟有一事不明,oracle 7.X的proc编译器是怎么把LONG型转成VARCHAR的,因为在程序当中还有其他的地方也有这样的问题,就怕LONG的值大了以后,出现溢出\甚至传1个非负的数,插完表之后这个值变成了个负数.
LONG 可變長度的字符數據,最大長度可以為2G
VARCHAR 可變長度的字符數據,最長可以到4000字節