为什么我不能插入100行表在我的pro * c程序



当我调用post函数时,我在日志中看到s_no,但插入没有完成。我得到"ORA-01722:无效号码"。

ORA-01722: invalid number:您执行了一个试图将字符串转换为数字的SQL语句,但是没有成功。"

int post(char (*s_no)[100])
{
  exec sql var s_no is string[100];   
  //sprintf(s_sno) here shows my 100 s_no log. Then I have the s_no whan I call post function  !
  EXEC SQL FOR 100
     insert into table_1(col1)
     select col2
     from table_2
     where col2 = :s_no;
}

s_no是一个指向字符数组的指针,我不知道如何转换它。

我该如何解决这个问题?

!

你的问题是,你试图分配一个字符串值到一个数字列;在SQL语句中使用每个字符串之前,需要将其转换为数值。

给定其在代码中的声明和使用,我假设s_no对应于调用函数中char的100x100数组,并且每个s_no[i]包含一个数值(即s_no[i] == "123.45")的0终止字符串表示。如果不正确,那我们就有更大的问题了。

你需要做的第一件事是将字符串数组转换为数字数组。这里有一个选项:

#include <stdlib.h> 
...
EXEC SQL BEGIN DECLARE SECTION;
double d_no[100];
EXEC SQL END DECLARE SECTION;
for ( size_t i = 0; i < 100 && s_no[i] != NULL; i++ )
  d_no[i] = strtod( s_no[i], NULL ); 
EXEC SQL FOR 100
  INSERT INTO TABLE_1(COL1)
    SELECT COL2 FROM TABLE_2
    WHERE COL2 = :d_no;

还没有测试过这个,但它至少应该让你知道你需要做什么。

如果我对s_no的任何假设是错误的,请让我知道,我会适当地更新代码。

在过去的几天里,我看到了一些使用这个s_no变量的Pro*C问题,所有这些问题似乎都是将指针与数字混淆;你们是在上同一门课吗?

相关内容

  • 没有找到相关文章

最新更新