例如,在此查询中:
(Clojure.contrib.sql/with-query-results rows ["SELECT count(*) from tableName"] (doseq [record rows] (println (vals record))))
似乎记录和行不在此范围之外,但我希望它随时存在以供我访问。
更新: 我尝试了以下代码行
(def asdf [])
(sql/with-connection db
(sql/with-query-results rows ["SELECT * FROM tableName"] (doseq [record rows] (def asdf (conj asdf record)))))
(println asdf)
为什么在sql语句中向行添加行时,asdf的print语句返回为空?
答案 0 :(得分:2)
您似乎缺乏对Clojure基本原则的基本理解,特别是不可变数据结构。您的conj
来电并未修改变量asdf
- 变量不是变量。您可以执行以下操作(未经测试)
(def asdf
(sql/with-connection db
(doall (sql/with-query-results rows ["SELECT * FROM tableName"]))))
将结果直接存储为asdf
的值,但这可能不是您想要的。请改为熟悉Clojure's take on functional programming。