有沒有一種方法可以使用給定的FDML接口一次插入多條記錄?如何使用提供的clsql一次插入多條記錄FDML
給出的insert-record語句只能處理一個值的元組一次並調用這個函數無數次的思想,而不是一旦纏着我了不少,我猜(而實際上不必做任何分析),這也不是最快的方法。
有沒有一種方法可以使用給定的FDML接口一次插入多條記錄?如何使用提供的clsql一次插入多條記錄FDML
給出的insert-record語句只能處理一個值的元組一次並調用這個函數無數次的思想,而不是一旦纏着我了不少,我猜(而實際上不必做任何分析),這也不是最快的方法。
這樣的事情呢?
; SLIME 2013-04-02
CL-USER> (ql:quickload "clsql")
To load "clsql":
Load 1 ASDF system:
uffi
Install 1 Quicklisp release:
clsql
; Fetching #<URL "http://beta.quicklisp.org/archive/clsql/2013-04-20/clsql-20130420-git.tgz">
; 900.99KB
==================================================
922,610 bytes in 1.92 seconds (468.78KB/sec)
; Loading "clsql"
[package uffi]....................................
[package cmucl-compat]............................
[package clsql-sys]...............................
[package clsql]...................................
[package clsql-user]..............................
..................................................
[package ansi-loop]..............................
("clsql")
CL-USER> (ql:quickload "clsql-sqlite3")
To load "clsql-sqlite3":
Load 1 ASDF system:
clsql-sqlite3
; Loading "clsql-sqlite3"
[package clsql-uffi]..............................
[package clsql-sqlite3]...........................
[package sqlite3]........
("clsql-sqlite3")
CL-USER> (clsql:connect '("./test.db") :database-type :sqlite3)
#<CLSQL-SQLITE3:SQLITE3-DATABASE ./test.db OPEN {10080C08E3}>
CL-USER> (clsql:enable-sql-reader-syntax)
; No value
CL-USER> (clsql:create-table [test_insert]
'(([id] integer)
([first_name] text)
([last_name] text)))
; No value
CL-USER> (clsql:insert-records :into [test_insert]
:attributes '(id first_name last_name)
:values '(0 "John" "Neumann"))
; No value
CL-USER> (clsql:select [id] [first_name] [last_name] :from [test_insert])
((0 "John" "Neumann"))
("ID" "FIRST_NAME" "LAST_NAME")
CL-USER> (clsql:insert-records
:into [test_insert]
:attributes '(id first_name last_name)
:query (clsql:sql-expression :string
"select 1 as id, 'Albert' as first_name, 'Einstein' as last_name
union select 2, 'Alan', 'Turing'"))
; No value
CL-USER> (clsql:select [id] [first_name] [last_name] :from [test_insert])
((0 "John" "Neumann") (1 "Albert" "Einstein") (2 "Alan" "Turing"))
("ID" "FIRST_NAME" "LAST_NAME")
也許你可以用其他方式構建插入查詢(其他數據庫可以提供不同的語法)。 clsql
已經(或者更恰當地說沒有)列重命名的語法...所以你必須操縱字符串/擴展它來讓它使用符號。
爲了擴展這個,你仍然必須編寫一個字符串生成函數來編寫相應的字符串查詢,因此你可以使用(clsql:query ...)。但我想這可能是唯一(當前)可用的解決方案,適合我的實際請求/問題 – Sim
@Sim'clsql:query'爭論在'select'中缺少':from' ...也許你可以做類似'select從雙'或任何假表在你的數據庫管理系統中可用,但這聽起來是錯誤的... – 2013-08-10 16:56:06
我的意思是你可以寫一個字符串生成方法女巫生成一個相應的SQL「INSERT INTO ...(...)VALUES (...)「語句,然後與'clsql:query'一起使用。如果你的意思是別的,請說明,因爲我當時不明白。 – Sim
很久以前,我使用'clsql',但我相信你可以構造一個任意的查詢語句,如果預定義的類型不適合你的話......另一種可能性是插入臨時表的內容,如果你可以在生成表的過程中生成一些數據,那麼這有時是首選。 – 2013-08-07 19:46:03
好吧,目前我只是構造了一個可以正常工作的字符串查詢,但我認爲如果有這樣一個很好的界面,爲什麼不嘗試使用它。對於這樣一個看似微不足道的問題,你的建議似乎有些複雜。但thx的建議。 – Sim