我正在做一项学习用 C 编写的嵌入式 SQL 的作业。前五个查询工作正常,但现在我似乎被卡住了。我没有得到关于这个的任何输出,即使它的结构与之前的查询完全相同。我可能只是错过了一些愚蠢的东西。想法?
[ed] 下面是应该从查询中得到的表。其中有空值,我收到 SQL 错误 -305 需要空指示器。
FIRST_NAME MIDDLE_NAME LAST_NAME BRANCH_NO
---------- ----------- -------------------- ---------
III - AAAAA 1000
KKK - BBB 1000
MMM - CC 3000
K PP DDD 3000
IIIII SSS DDDDD 3000
JJJ QQ EEE 3000
JJJ PP GGG 1000
K - GGG 1000
MEI - JIANG 3000
JASPER CHIACHUN WENG 1000
10 record(s) selected.
[/ed]
void query6()
{
// SQL Query Definition
EXEC SQL
DECLARE c6 CURSOR FOR
SELECT s.first_name, s.middle_name, s.last_name, b.branch_no
FROM staff AS s, branch AS b
WHERE s.allocated_to = b.branch_no AND
s.allocated_to IN (SELECT branch_no
FROM branch
WHERE city = 'HAMILTON')
ORDER BY s.last_name, s.first_name, s.middle_name;
// Pretty Output
printf("\n%-15s %-15s %-15s %-15s\n",
"FIRST_NAME","MIDDLE_NAME","LAST_NAME","BRANCH_NO");
printf("%-15s %-15s %-15s %-15s\n",
"----------","-----------","---------","---------");
// Fetch SQL Result and Print
EXEC SQL OPEN c6;
while(1)
{
printf("fetch\n");
EXEC SQL FETCH c6 INTO :sqlBuffer1,
:sqlBuffer2,
:sqlBuffer3,
:sqlBuffer4;
depad(sqlBuffer1);
depad(sqlBuffer2);
depad(sqlBuffer3);
depad(sqlBuffer4);
if (SQLCODE!=0) break;
printf("%-15s %-15s %-15s %-15s\n",
sqlBuffer1,sqlBuffer2,sqlBuffer3,sqlBuffer4);
}
EXEC SQL CLOSE c6;
printf("\n");
return;
}
最佳答案
这似乎是正确的,但我可能会这样写:
SELECT s.first_name, s.middle_name, s.last_name, b.branch_no
FROM staff AS s, (SELECT branch.branch_no FROM branch WHERE branch.city = 'HAMILTON') AS b
WHERE s.allocated_to = b.branch_no
ORDER BY s.last_name, s.first_name, s.middle_name;
关于sql - 嵌入式 SQL - 没有输出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5532019/