为什么我不能在我的 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 还是什么?
当我调用 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 还是什么?