环境:
系统:   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个非负的数,插完表之后这个值变成了个负数.