4.1.4在单元格中直接使用SQL

除了使用db.query(sql)函数和db.execute(sql)函数,在集算器中还可以用$(db)sql;…直接执行SQL。如果(db)省略,则取之前最后一次使用的数据库连接。其中的sql语句可以带参数,写在分号后面即可。用这种方法时,使用sql语句时不在前方加等号,也不必将语句用引号标记,但是不再支持使用@1选项。此时,不需再用execute或者query函数来区分是否返回结果集。其中select语句会返回结果集,其它语句会各自返回不同的值。如:

 

A

1

$(demo)select * from STATES where ABBR like 'N%' order by POPULATION desc

2

[CA,ME,NM,SC,LA]

3

$select * from STATES where ABBR in (?) order by AREA;A2

这里的代码,和4.1.2 SQL的简单使用中代码的效果是相同的,执行结果完全一样。其中A3格中并未指明数据源的名称,取之前最后使用的数据连接,仍然是(demo)

再来看看下面的情况:

 

A

1

$(demo) create table TESTTEMP (ID int, NAME varchar(20))

2

$(demo) insert into TESTTEMP values (2,'Tom Smith')

3

=demo.query("select * from TESTTEMP")

4

$(demo)update TESTTEMP set NAME='Jane White' where ID=2

5

=demo.query("select * from TESTTEMP")

6

$(demo)drop table TESTTEMP

A1中新建一个序表,A2中插入1条记录。A4中修改记录中的数据,A6中删除序表。在A3A5中查询到的数据库更新情况如下:

 

需要注意的是A1,A2,A5A6中的代码虽然都是执行语句,但都有了返回值,这和上一节中的情况似乎有所不同。我们来看一下返回的结果:

 

 

其中,A1A6中的结果表示SQL语句未返回结果集。A2A4中的结果表示更新了1条记录。

使用$(db)sql;…的格式,可以使代码更为简洁,但是需要注意使用参数时需要用分号分隔,同时需要区分返回结果的不同。