0

我正在尝试使用 HugSQL 从我的数据库中选择一些记录,然后我取回记录我在尝试这段代码时遇到了一些问题:

f/attempt-all [_ (println  "Getting DB records")
                    db-records (oracle-db/get-records my-db)
;hangs here when there are large(100,000k+) records

-- :name get-records
select /*+ index(src_ski_sysevents_au SRC_SKI_SYSEVENTS_AU_IDX_A)*/ * from src_ski_sysevents_au where week_id='201903' AND ROWNUM <'10000'

实际结果:db-records 有一个地图列表(返回的每条记录的地图),如下所示:

({:remarks nil, :timeprocessing 1994-01-01 00:00:00.000, :devicetype 3M, :staffcode 0M, 
           :timedeletion 1994-01-01 00:00:00.000, :occurred 1M, :syseventdesig Ticket jam, :time 2019-01-14 10:47:37.350, :syseventno 27M, 
  :devicedesig P4 LH Exit Wilga ST - 49, :devicenoprocessing 0M, :component nil, :lotabbr P3P4, :deviceabbr P4 LEX WIL, 
  :week_id 201903M, :lotdesig P3, P4 Levels, :dss_update_time #inst "2019-01-14T15:48:46.000000000-00:00", :loaded_new_yn N, 
  :operatorfirstname nil, :quantity 1M, :systemeventregno 7365M, :pdi_batch_id 697410M, :lotno 1M, :deviceno 49M, :deleted_yn N, 
  :centre_no 0012000, :lot_no 0012001, :operatorsurname unattended, :operatornoprocessing 0M}
  ...
)

我想知道如何将此映射列表转换为 Json 字符串文件或 CSV 文件以将其推送到我的端点。在处理非字符串值时,例如

:时间处理 1994-01-01 00:00:00.000

一旦我将此测试字符串放入以 (comment (def testmap {input_test_Data}))无效数字格式进行测试,我就会看到这些错误,我还发现

:dss_update_time 在我的数据库中是“15/JAN/19”

但是在 HugSQL 结果中,我得到了这样的结果

:dss_update_time #inst “2019-01-14T15:48:46.000000000-00:00”

基本上我将如何确保我取回所有数据至少我的问题的第二部分真的很感激一些帮助。谢谢

4

1 回答 1

0

请使用该功能prn而不是println打印出示例数据行。然后你会看到日期值实际上是字符串(prn不会像这样去掉双引号字符println)。

此时,您可以使用普通的 EDN->JSON 转换。Tupelo 库中有一个简单的函数

(t/edn->json  {:a 1  :b 2})
;=> {"a":1,"b":2}

它只是在幕后使用 Cheshire 库并自动进行关键字<->字符串转换。

于 2019-04-04T03:29:11.153 回答