【发布时间】:2014-07-11 23:28:55
【问题描述】:
我有一个存储过程,其内容如下:
-- --------------------------------------------------------------------------------
-- Routine DDL
-- Note: comments before and after the routine body will not be stored by the server
-- --------------------------------------------------------------------------------
DELIMITER $$
CREATE DEFINER=`MailMe`@`%` PROCEDURE `sp_archivev3`()
BEGIN
INSERT INTO
send.sgev3_archive(a_bi,
b_vc,
c_int,
d_int,
e_vc,
f_vc,
g_vc,
h_vc,
i_dt,
j_vc,
k_vc,
l_vc,
m_dt,
n_vch,
o_bit)
SELECT a_bi,
b_vc,
c_int,
d_int,
e_vc,
f_vc,
g_vc,
h_vc,
i_dt,
j_vc,
k_vc,
l_vc,
m_dt,
n_vch,
o_bit
FROM send.sgev3
WHERE m_dt BETWEEN '2014-06-09' AND CURDATE();
END
因为,我的查询是将记录从send.sgev3 插入到send.sgev3_archive。我还想做一件事。在选择 send.sgev3 表中的记录并将其插入send.sgev3_archive 后,我想删除它们。我应该在上面的代码中的 SELECT 查询下面写 DELETE 查询吗?只是想确认一下,因为我不想弄乱我的真实数据并在不复制的情况下意外删除任何记录。请指教。
【问题讨论】:
-
特别是如果
m_dt真的是一个时间戳,你不应该使用the inclusive upper-bound ofBETWEEN。您还需要在两个语句中使用 same value 作为上限,因此首先需要单独获取它。就此而言,您可能希望能够将范围传递给您的存储过程,而不仅仅是使用预定义的范围。
标签: mysql sql stored-procedures