为什么我不能在我的 PRO*C 程序中将 100 行插入 table_1?

Why cannot I insert 100 rows into table_1 in my PRO*C program?

当我调用 post 函数时,我在我的日志中看到了 s_no 但插入没有完成。我得到 "ORA-01722: invalid number".

ORA-01722: 数字无效:您执行了 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] 包含一个 0 结尾的字符串表示 数值(即 s_no[i] == "123.45")。如果那不正确,那么我们就会遇到更大的问题。

因此,您需要做的第一件事是将字符串数组转换为数字数组。这是一个选项:

#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 问题,所有这些问题似乎都将指向字符串的指针与数字混淆了;你们都服用相同的 class 还是什么?