嵌入式SELECT语句¶
查询数据库是一个非常常见的SQL操作。首先让我们来看一个简单的例子:
EXEC SQL SELECT empname, city, grade + 1
INTO :hname, :hcity, :hgrade
FROM employee
WHERE empnum = :hnum;
SELECT关键字后的列名和表达式组成了select列表,在上面这个例子中,select列表包括三项。WHERE子句指定需要返回元组的条件,在这里用输入主变量指定职员的号码,这是主关键字,所以返回的元组数或者为0,或者为1。于是,用户可以用标量输出主变量处理。输出主变量放在INTO子句中,它们的个数必须和select列表中指定的项数相同,它们的排列顺序也必须一一对应select列表中的列。
执行该语句后,用户就可以从主变量中读取该元组的相应值。
SELECT操作可能返回一行或者多行。返回一行的情况比较容易处理,如果返回多行,则需要使用游标或者宿主数组。对于宿主数组,在前一章已经介绍。关于游标的更多信息,请参看第7章,''游标''。
如果已知查询只返回一行,那么就可以在INTO子句中使用和字段表中的项数一样多的输出宿主变量来存放相应的列值。例如,根据单值索引查询记录,保证最多只有一个匹配,如:
EXEC SQL SELECT empname, grade ,city
INTO :hname, :hgrade,:hcity
FROM employee
WHERE empnum=:hnum
其中,''empnum''是employee表的主关键字,保证是单值的。
用esql*C编写的任何SELECT语句都可以包括以下子句:
- INTO
- FROM
- WHERE
- UNION
- GROUP BY
- HAVING
- ORDER BY
- FOR UPDATE OF