2012-05-03 6 views
0

私はMySQLカーソルを持っていますが、それを読み取り専用でスクロールできないように設定する必要がありますが、ストアドプロシージャでどのように設定できますか?MySQL用カーソルタイプ

「MySQLが格納されたプログラム内のカーソルをサポート構文は次のとおりです。

私のストアドプロシージャは、あなたが使用しているバージョンのMySQL言及したが、MySQL 5.0 reference manualに応じていない

DROP PROCEDURE IF EXISTS `GetAllNonprocessedSMSes` €€ 
CREATE PROCEDURE `GetAllNonprocessedSMSes`() 
    BEGIN 
     ... 
     DECLARE id_cur CURSOR FOR 
     SELECT `id` FROM (
      SELECT 
       MIN(`id`) AS `id` 
      FROM 
       `inbox` 
      WHERE 
       `Processed`='false' 
       AND `udh`='' 
     ) AS `baseview` 
     ORDER BY `id`; 

     DECLARE CONTINUE HANDLER FOR NOT FOUND SET finish = TRUE; 

     OPEN id_cur; 
     the_loop : LOOP 
     FETCH id_cur INTO smsid; 
     ... 
     END LOOP the_loop; 

     ... 
    END €€ 
+0

なぜカーソルを「読み取り専用で、スクロールできない」ようにしたいですか?確かに、その場合、あなたのループは意図したとおりに動作しませんでしたか? – eggyal

答えて

1

のように見えます
- サーバーは結果表のコピーを作成する場合もあります。
- 読み取り専用:更新不可の場合
- Nonscrol lable:一方向にのみ移動でき、行をスキップすることはできません "

したがって、MySqlカーソルは定義上、読み取り専用で、スクロール不可能です。

+0

私が理解するように、それはプロパティを持つことができますが、それらを持つ必要はありません。私は5.1.61を使用しています – The87Boy

+0

MySql 5.0,5.1,5.5,5.6はすべて同じです。カーソルは読み取り専用であり、スクロールできません。おそらく定義との誤解があるかもしれません。非スクロール可能とは、カーソルがデータの行を(一方向のみに)移動し、行をスキップできないことを意味します。私の知る限り、ストアドプロシージャに設定するものはありません。詳細については、上記のMySqlリファレンス・リンクを確認してください。 – MarkusBee