[我试图构建一个C程序来生成部分随机的字符串,然后将大量的字符串插入到循环中的db2行中,所以我需要它从嵌入式SQL中插入。
我可以进行选择查询,c编译器,db2预编译器和联编程序都可以正确执行。它甚至不让我使用硬编码变量进行插入,更不用说使用主机变量了,并且从终端行查询完全成功。
db2 "INSERT INTO SYT006_COUNTRY(SL_ISO2,BZ_COUNTRY,KZ_RISK) VALUES ('XY', 'wont work from embedded SQL', 'R')"
主机变量定义为char数组,并且终止符还有一个位置。平台是Ubuntu。
我尝试了一百万件事,所以这里是代码。编辑所有过时的内容
#include <stdio.h> #include <string.h> #include <sqlca.h> #include <stdlib.h> #include <sqlenv.h> #include <sqlcodes.h> #include <sqlutil.h> #include <time.h> #include "utilemb.h" #include "sqlaprep.h" /* SQL includes */ EXEC SQL INCLUDE SQLCA; EXEC SQL BEGIN DECLARE SECTION; EXEC SQL DECLARE SYT006_COUNTRY TABLE ( KEYFIELD INT, SL_ISO2 CHAR(2) NOT NULL, BZ_COUNTRY CHAR(30) NOT NULL, KZ_RISK CHAR(1) NOT NULL ) ; char hostVar[31]; EXEC SQL END DECLARE SECTION; int main() { /* connect to the database REQUIRED */ printf("Connecting to database...\n "); EXEC SQL CONNECT TO "sample"; if (SQLCODE <0) { printf("Connect Error. Code: %d\n", sqlca.sqlcode); } else { printf("Connected to database. Code: %d\n",sqlca.sqlcode ); } /* works only from command line terminal*/ EXEC SQL INSERT INTO SYT006_COUNTRY(SL_ISO2,BZ_COUNTRY,KZ_RISK) VALUES ('XY', 'please', 'R'); /* this one works perfectly normal*/ /* EXEC SQL SELECT BZ_COUNTRY INTO :hostVar FROM SYT006_COUNTRY WHERE KEYFIELD = 515; printf("printing hostVar: %s\n", hostVar); */ printf("MAIN FINISH \n"); return (0); }/*end main*/
唯一的乱序是当我从shell脚本启动db2时:
SQL5043N对DB2COMM环境变量中指定的一个或多个通信协议的支持未能成功启动。但是,核心数据库管理器功能已成功启动。SQL1063N DB2START处理成功。
我正在尝试构建一个C程序来生成部分随机的字符串,并将其大量插入到循环中的db2行中,所以我需要它从嵌入式SQL中插入...。该程序可以完成所有工作...]
第二天再喝一杯咖啡再好不过了。嵌入式SQL程序需要以下行
EXEC SQL COMMIT;