免费注册 查看新帖 |

Chinaunix

广告
  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3652 | 回复: 2
打印 上一主题 下一主题

db2 sqc查询问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-05-13 14:00 |只看该作者 |倒序浏览
我的sqc程序中的查询语句
EXEC SQL select ... into ... from xxx where ...;
select后有十个字段,在数据库的表当中,第五个字段为空,其余都有值
然而查询程序运行的结果是第五到第十个变量的值都为空
为什么?

论坛徽章:
0
2 [报告]
发表于 2007-05-13 18:51 |只看该作者
宿主变量和NULL
大多数程序设计语言(如C)都不支持NULL。所以对NULL的处理,一定要在SQL中完成。我们可以使用主机指示符变量来解决这个问题。在嵌入式SQL语句中,宿主变量和指示符变量共同规定一个单独的SQL类型值。指示变量和前面宿主变量之间用一个空格相分隔。如:
EXEC SQL SELECT price INTO :price :price_nullflag FROM titles
WHERE au_id = "mc3026"
其中,price是宿主变量,price_nullflag是指示符变量。指示符变量的值为:
l-1。表示宿主变量应该假设为NULL。(注意:宿主变量的实际值是一个无关值,不予考虑)。
l=0。表示宿主变量不是NULL。
l>0。表示宿主变量不是NULL。而且宿主变量对返回值作了截断,指示变量存放了截断数据的长度。
所以,上面这个例子的含义是:如果不存在mc3026写的书,那么price_nullflag为-1,表示price为NULL;如果存在,则price为实际的价格。
指示变量也是一种宿主变量,也需要在程序中定义,它对应数据库系统中的数据类型为SMALLINT。为了便于识别宿主变量,当嵌入式SQL语句中出现宿主变量时,必须在变量名称前标上冒号(:)。冒号的作用是,告诉预编译器,这是个宿主变量而不是表名或列名。

论坛徽章:
0
3 [报告]
发表于 2007-05-13 19:06 |只看该作者
我们公司,建表所有字段都不能为空
CREATE TABLE "abc"."defg"  (
"XXXX1" CHAR(14) NOT NULL WITH DEFAULT  ,
"XXXX2" CHAR(8  ) NOT NULL WITH DEFAULT  ,
"XXXX3" CHAR(14) NOT NULL WITH DEFAULT  ,
"XXXX4" CHAR(8 ) NOT NULL WITH DEFAULT  ,
"XXXX5" CHAR(6) NOT NULL WITH DEFAULT  ,
"XXXX6" DECIMAL(15,2) NOT NULL WITH DEFAULT  ,
"XXXX7" CHAR(15) NOT NULL WITH DEFAULT  ,
"XXXX8" CHAR(1) NOT NULL WITH DEFAULT  ,
"XXXX9" INTEGER NOT NULL WITH DEFAULT  ,  
  .................

每个表生成对应的结构体
struct
{
   char XXXX1[15]; //长度加1    \0
  char XXXX2[9];
............

}defg;

一般对结构体操作
exec sql   insert into "abc"."defg"values(:defg);

exec sql fetch abcdefg into :defg; //abcdefg 是cursor

[ 本帖最后由 pchotmail 于 2007-5-13 19:07 编辑 ]
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP