当我调用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问题,所有这些问题似乎都是将指针与数字混淆;你们是在上同一门课吗?