![](/img/trans.png)
[英]pass one stored procedure result into other stored procedure as parameter in Mysql
[英]MySQL stored procedure pass select as parameter
您能否給我一個建議,如何用SELECT結果調用prcd? 或建議我提供更好的解決方案。.我對所有可行的解決方案持開放態度
我有一個程序來控制插入數據...
CREATE PROCEDURE control_insert (
)
我需要將數據從SELECT結果傳遞到過程...
SELECT t.c1, t.c2
FROM table t1
LEFT JOIN other_table t2
ON t1.id = t2.id
WHERE 1=1
關鍵是,我需要通過SELECT獲取一些數據(大約6個表連接到基本表),並且需要在插入之前對每一行進行控制。每行應該滿足一些條件..如果不滿足它們,它應該跳過它並處理下一個...
該過程應如下所示:
CREATE PROCEDURE control_insert (
IN v_c1 INT,
IN v_c2 INT
)
BEGIN
IF v_c1 > 1 THEN
INSERT INTO controlled_table (id, type) VALUES (v_c1, v_c2);
ELSE
/* do nothing */
END IF;
END;
CALL control_insert ( SELECT .... );
你能幫我嗎? 有可能通過MySQL執行此操作嗎? 我可以寫一個PERL skript,但是我想避免這種類型的解決方案...我只是一個只能用MySQL方式做到這一點的人
謝謝
EDIT1:我需要檢查SELECT結果的ID和LABEL是否已在特定日期的表中...上面的代碼僅是演示這種情況的示例
解
我已經找到了解決方案...因此對於其他訪客:
調用過程:
CALL controlInsert();
程序主體:
CREATE PROCEDURE controlInsert()
BEGIN
DECLARE done INT DEFAULT FALSE;
DECLARE v_id INT;
DECLARE v_id_dupl INT;
DECLARE v_label INT;
DECLARE v_date DATE;
DECLARE v_type VARCHAR(100);
DECLARE v_category VARCHAR(255);
DECLARE v_user VARCHAR(255);
DECLARE v_country VARCHAR(255);
DECLARE c1 CURSOR FOR SELECT id, label, date, type, category, user, country FROM t1 LEFT JOIN ... /* whole select with 6 joins ended by ; */
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;
## open cursor
OPEN c1;
## loop through the cursor
read_loop: LOOP
## fetch cursor into variables
FETCH c1 INTO v_id , v_label, v_date, v_type, v_category, v_user, v_country;
## check if there is any record
IF done THEN
LEAVE read_loop;
END IF;
## get count of existing records
SELECT count(*) INTO v_id_dupl
FROM
WHERE 1=1
AND id = v_id
AND label= v_label
AND date = v_date;
## if v_id_dupl = 0 => no rows found (ok to load)
IF (v_id_dupl = 0) THEN
INSERT INTO target_table (id, label, date, type, category, user, country)
VALUES (v_id , v_label, v_date, v_type, v_category, v_user, v_country);
END IF;
END LOOP;
CLOSE c1;
END
如果這就是您的存儲過程所做的全部,那么您實際上就不需要它了。 您可以在一個語句中完成全部操作:
INSERT INTO controlled_table (id, type)
SELECT t.c1, t.c2
FROM table t1
LEFT JOIN other_table t2 ON t1.id = t2.id
WHERE something = somethingElse
AND t.c1 > 1
本質上,我只是將原始查詢與過程中的INSERT
語句組合在一起。
如果您的過程更復雜,並且需要在每一行上執行多個操作,則應使用游標進行調查。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.