proc中如何编译case when语句 如题我编译 SELECT 1, CASE WHEN (1=1) THEN 2 ELSE 3 END case, 2 from dual;这句话都不行。开发环境是AIX 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 有什么错误?是不是用了关键字case没有加引号,试这样改SELECT 1 aa, CASE WHEN (1=1) THEN 2 ELSE 3 END bb, 2 cc from dual; 试试这个:SELECT 1 A, CASE WHEN (1 = 1) THEN 2 ELSE 3 END B, 2 C FROM DUAL; http://www.itpub.net/viewthread.php?tid=813181&highlight=proc%2Bcase在这里查到说是Oracle9i Release 2 版本或以后的版本才支持!我的版本是Pro*C/C++: Release 9.0.1.0.0 - Production on Tue Mar 10 11:45:06 2009晕了,是不是这样的。 case 为关键字,需要加引号,或换为其他的名字.SELECT 1, CASE WHEN 1 = 1 THEN 2 ELSE 3 END 'case', 2 from dual; select 1, case when 1=1 then 2 else 3 end, 2from dual 说错了,不用加,直接用case即可.SELECT 1, CASE WHEN 1 = 1 THEN 2 ELSE 3 END case, 2 from dual; /*1 case 21 2 2*/ 以上环境为:toad 8.53 + oracle 9i 我帮你试过了,没问题,应该不是这个语句的问题。示例程序如下:#include <stdio.h>#include <stdlib.h>EXEC SQL BEGIN DECLARE SECTION;VARCHAR username[20];VARCHAR password[20];VARCHAR dbname[20];EXEC SQL END DECLARE SECTION;int db_connect(char *user,char *pass,char *server){strcpy((char *)username.arr,user);username.len = strlen((char *)username.arr);strcpy((char *)password.arr,pass);password.len = strlen((char *)password.arr);strcpy((char *)dbname.arr,server);dbname.len = strlen((char *)dbname.arr);/*EXEC SQL WHENEVER SQLERROR STOP;*/EXEC SQL CONNECT :username IDENTIFIED BY :password USING :dbname;return sqlca.sqlcode;}a;{ printf("connect error\n");exit;}void db_disconnect(){ EXEC SQL COMMIT WORK RELEASE;}int db_fetch(){ EXEC SQL BEGIN DECLARE SECTION; int aa,bb,cc; EXEC SQL END DECLARE SECTION; EXEC sql whenever not found goto notfound; exec sql whenever sqlerror goto fail; EXEC SQL SELECT 1, CASE WHEN (1=1) THEN 2 ELSE 3 END case, 2 into :aa,:bb,:cc from dual; printf("aa=%d,bb=%d,cc=%d\n",aa,bb,cc); //打印出结果是1,2,2 return 1;notfound: return 0;fail: return -1;}main(){db_connect("user","pass","dbinst");db_fetch();db_disconnect();} 可能是这个原因。我的Pro*C/C++: Release 9.2.0.7.0 实践证明就是oracle客户端版本的原因。结贴!谢谢大家。 oracle 11g r2 所选安装与指定oracle主目录中已安装软件冲突 简单的存储过程,确带有编译错误 select ename from emp 面试题,请高手们看看 深入讨论非树形结构下使用connect by产生的结果集问题 有答案今天就结贴---如何对指定表空间的表操作 怎么update替换掉某些词 老问题了,监听器无法打开,但就是解决不了 oracle 安装完后,自动配置需要多少时间 我的Oracle为什么无法安装?(p4,128ram,Winxp 专业版) 关于查询问题。 VC下PROC select * from 表名 如果 表名是非常量的话
是不是用了关键字case没有加引号,试这样改
SELECT 1 aa,
CASE
WHEN (1=1) THEN 2
ELSE 3
END bb,
2 cc from dual;
SELECT 1 A,
CASE
WHEN (1 = 1) THEN
2
ELSE
3
END B,
2 C
FROM DUAL;
在这里查到
说是Oracle9i Release 2 版本或以后的版本才支持!
我的版本是
Pro*C/C++: Release 9.0.1.0.0 - Production on Tue Mar 10 11:45:06 2009
晕了,是不是这样的。
CASE WHEN 1 = 1 THEN 2 ELSE 3 END 'case',
2
from dual;
case when 1=1 then 2 else 3 end,
2
from dual
CASE WHEN 1 = 1 THEN 2 ELSE 3 END case,
2
from dual; /*
1 case 2
1 2 2
*/
#include <stdlib.h>
EXEC SQL BEGIN DECLARE SECTION;
VARCHAR username[20];
VARCHAR password[20];
VARCHAR dbname[20];
EXEC SQL END DECLARE SECTION;
int db_connect(char *user,char *pass,char *server)
{
strcpy((char *)username.arr,user);
username.len = strlen((char *)username.arr);
strcpy((char *)password.arr,pass);
password.len = strlen((char *)password.arr);
strcpy((char *)dbname.arr,server);
dbname.len = strlen((char *)dbname.arr);
/*EXEC SQL WHENEVER SQLERROR STOP;*/
EXEC SQL CONNECT :username IDENTIFIED BY :password USING :dbname;return sqlca.sqlcode;
}a;
{
printf("connect error\n");
exit;
}
void db_disconnect()
{
EXEC SQL COMMIT WORK RELEASE;
}int db_fetch()
{
EXEC SQL BEGIN DECLARE SECTION;
int aa,bb,cc;
EXEC SQL END DECLARE SECTION; EXEC sql whenever not found goto notfound;
exec sql whenever sqlerror goto fail;
EXEC SQL SELECT 1,
CASE WHEN (1=1) THEN 2
ELSE 3
END case,
2
into :aa,:bb,:cc from dual; printf("aa=%d,bb=%d,cc=%d\n",aa,bb,cc); //打印出结果是1,2,2
return 1;
notfound:
return 0;
fail:
return -1;}main()
{
db_connect("user","pass","dbinst");db_fetch();db_disconnect();
}
可能是这个原因。我的
Pro*C/C++: Release 9.2.0.7.0