2013-03-18 67 views
0

我有被聲明爲這樣一個光標(可能):MySQL的遊標提取而不聲明變量

DECLARE staging_cur CURSOR FOR 
SELECT 
col1, col2, ...... 
FROM crawl_db.staging_listing 
WHERE is_deleted = FALSE; 

我然後取各行,進行一些檢查,然後插入一行到另一(生產)數據庫

OPEN staging_cur; 
the_loop: LOOP 

    FETCH staging_cur 
    INTO col1_val, col2_val,.....; 

    -- perform some checks and some optional inserts 
     -- for example, if city with given name is not found in production DB, insert it 

    -- insert into production db 

END LOOP the_loop; 

原來自己需要聲明的變量(col1_val, col2_val ...)爲表staging_listing的(col1, col2....)每個對應列中。問題是這個表格包含90-100列,並聲明所有變量真的很麻煩

看來應該有一個比這更好的方法。有什麼方法可以訪問遊標當前行的列,而無需聲明單獨的變量來保存列值?

+0

變量的目的是什麼? – 2013-03-18 07:47:49

+0

其中一些用於「執行一些檢查」步驟。其中大部分用於'insert into production db'步驟。 – arahant 2013-03-18 07:53:34

回答

0

如果您需要將行插入到另一個表中,那麼更好的方法是使用INSERT ... SELECT語句。儘量避免使用遊標。

INSERT ... SELECT Syntax

+0

實際上,每行都有一些檢查和可選插入。基於這些可選插入,我們在進一步的插入中使用自動生成的插入標識。 (我更新了我的問題) – arahant 2013-03-18 08:01:24

+0

如果可能的話 - 嘗試使用DML語句:INSERT,UPDATE等;否則,你將不得不創建這些變量。 – Devart 2013-03-19 07:27:01