proc中如何编译case when语句

robin_yao 2009-03-10 11:23:56
如题
我编译
SELECT 1,
CASE
WHEN (1=1) THEN 2
ELSE 3
END case,
2
from dual;
这句话都不行。
开发环境是AIX
...全文
123 10 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
mosaic 2009-03-10
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 robin_yao 的回复:]
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


晕了,是不是这样的。
[/Quote]

可能是这个原因。我的
Pro*C/C++: Release 9.2.0.7.0
mosaic 2009-03-10
  • 打赏
  • 举报
回复
[Quote=引用楼主 robin_yao 的帖子:]
如题
我编译
SELECT 1,
CASE
WHEN (1=1) THEN 2
ELSE 3
END case,
2
from dual;
这句话都不行。
开发环境是AIX
[/Quote]


我帮你试过了,没问题,应该不是这个语句的问题。示例程序如下:

#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();
}
dawugui 2009-03-10
  • 打赏
  • 举报
回复
以上环境为:toad 8.53 + oracle 9i
dawugui 2009-03-10
  • 打赏
  • 举报
回复
说错了,不用加,直接用case即可.

SELECT 1,
CASE WHEN 1 = 1 THEN 2 ELSE 3 END case,
2
from dual;

/*
1 case 2
1 2 2
*/
xanaduwpz 2009-03-10
  • 打赏
  • 举报
回复
select 1,
case when 1=1 then 2 else 3 end,
2
from dual
dawugui 2009-03-10
  • 打赏
  • 举报
回复
case 为关键字,需要加引号,或换为其他的名字.

SELECT 1, 
CASE WHEN 1 = 1 THEN 2 ELSE 3 END 'case',
2
from dual;
robin_yao 2009-03-10
  • 打赏
  • 举报
回复
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


晕了,是不是这样的。
oracledbalgtu 2009-03-10
  • 打赏
  • 举报
回复
试试这个:
SELECT 1 A,
CASE
WHEN (1 = 1) THEN
2
ELSE
3
END B,
2 C
FROM DUAL;


[Quote=引用楼主 robin_yao 的帖子:]
如题
我编译
SELECT 1,
CASE
WHEN (1=1) THEN 2
ELSE 3
END case,
2
from dual;
这句话都不行。
开发环境是AIX
[/Quote]
Andy__Huang 2009-03-10
  • 打赏
  • 举报
回复
有什么错误?
是不是用了关键字case没有加引号,试这样改
SELECT 1 aa,
CASE
WHEN (1=1) THEN 2
ELSE 3
END bb,
2 cc from dual;
robin_yao 2009-03-10
  • 打赏
  • 举报
回复
实践证明就是oracle客户端版本的原因。结贴!谢谢大家。

17,140

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧