カーソルが宣言されたとき、それは静的なデータセットですか、または新しいデータがループを開始する前に入力されたかどうかを宣言した後に、ループのためにピックアップされますか?P1-SQLカーソルに格納されたデータは動的か静的ですか?
答えて
カーソルを宣言すると、名前と関連するSELECTステートメントでカーソルが定義されます。カーソルを宣言した後、カーソルをオープンしてカーソル用のメモリーを割り振り、SQLステートメントによって戻された行をその中に取り込む準備ができている必要があります。たとえば、次のようにカーソル CURSORのc_customersを宣言
は、ID、名前、顧客からのアドレスを選択 されます。
カーソルを開く OPEN c_customers;
開いた後、カーソルをフェッチすることで、一度に1行にアクセスできます。 FETCH c_customers INTO c_id、c_name、c_addr;
カーソルをフェッチした後、カーソルを閉じるだけです。 閉じるc_customers;
したがって、ループでは取り上げられません。
修正すると、後で "実行するもの"の "定義"としてカーソルが表示されます。カーソルを開いた瞬間は、データセットが有効な正確な時刻です。あなたは好きなだけカーソルから読み続けることができます。それが返すデータは、常にあなたの開始時刻の状況を表します。他のセッションでデータが変更され、あなたが長時間待機すると、SNAPSHOT TO OLDエラーが発生する可能性があります。このようにしてください:オープン時には、現在の状況のスナップショットが必要です。このスナップショットは、カーソルを閉じるまで有効です。他のセッションでのデータ変更はあなたには見えません。 – hetOrakel
真の場合、データの変更は不可視です。 –
オラクル社ではStatement-Level Read Consistencyを提供しています。これにより、単一の問合せで戻されたデータがコミットされ、問合せの開始時に一貫性が保証されます。
トランザクション分離レベル、フラッシュバック・クエリ、および問合せを実行するユーザー定義関数にはいくつかの詳細がありますが、一般に問合せが開始されると(手順的にはカーソルがオープンされると)結果は真となりますその時点では、データの変更(コミットされたかどうか)にかかわらず。
私はmysqlを試していますが、mysqlはデータを取得しています。
新しいテーブルを作成し、プロシージャを作成しました。このプロシージャは、新しく作成された空の表に2つのレコードを挿入して、カーソルを開いてを変数record_cnt
に選択します。 FOUND_ROWS()
は、カーソルによってフェッチされた行の数を示します。オラクルではcursor_name%ROWCOUNT
です。
オラクルでは、構文上の相違点は間違いありませんが、カーソルを開く前に動作が同じで、カーソルが挿入されてコミットされていると値がカーソルに表示されると思います。
CREATE TABLE my_tab(id int);
DELIMITER $$
CREATE PROCEDURE cursor_test(OUT record_cnt INT)
BEGIN
DECLARE done INT DEFAULT FALSE;
DECLARE cur1 CURSOR FOR SELECT * FROM my_tab;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;
INSERT INTO my_tab VALUES(1),(2);
COMMIT;
OPEN cur1;
SELECT FOUND_ROWS() INTO record_cnt;
CLOSE cur1;
END$$
DELIMITER ;
CALL cursor_test(@rec);
select @rec;
+------+
| @rec |
+------+
| 2 |
+------+
私のシナリオは、カーソルを開いた後selectステートメントの前にテーブルにレコードを入力したときです。同じセッションまたは別のセッションのいずれか –
その場合は利用できません。 –
- 1. SQL Server動的テーブルデータベースに格納されたフィールド名から
- 2. C++:マルチマップ静的変数に格納されたデータへのアクセス方法
- 3. 動的に生成されたページを静的ページasp.net mvc3に格納する方法は?
- 4. メモリの静的変数はどこに格納されていますか?
- 5. 格納データ動的に割り当てられた配列
- 6. データが動的データ型に格納されているときにデータを動的に取得する
- 7. CLRは静的クラスをどこに格納しますか?
- 8. 大量の静的データをAzureに格納する
- 9. XMLからデータベースへデータを動的に格納するサービス
- 10. のApache Tomcatにアップロードされた静的ファイルを格納するために
- 11. ウェブアプリケーションの静的リソースを格納する
- 12. URLは自動的にcodeigniterのURLに格納されます
- 13. クラスを使用して静的データをJavaに格納しますか?
- 14. カーソルからフェッチされた行をレッドシフトに格納
- 15. クラスの静的データメンバと静的関数メンバは、関数とグローバル変数の静的変数と同じ場所に格納されていますか?
- 16. はBigTableのに物理的に格納されたデータはどのよう
- 17. 静的コンテンツを格納するときにアプリケーションのサイズは重要ですか?
- 18. 静的idの動的価格Workcube - Coldfusion
- 19. Swiftに拡張機能を介して静的に格納された変数を追加できますか?
- 20. 静的ストレージに格納されている場合、Methodローカル変数はガベージコレクトされますか?
- 21. 静的ライブラリにバージョン番号を格納する方法は?
- 22. メソッドを静的変数に格納する方法は?
- 23. データを永続的に格納できるデータ構造はありますか?
- 24. Javascriptは動的か静的にHTMLにリンクされていますか?
- 25. jspで作成されたフォームに動的に入力された値をarraylistに格納する方法は?
- 26. iOSは静的または動的なフレームワークですか?
- 27. ABAPはどのセッション/メモリに静的属性値を格納しますか?
- 28. シンボル表の静的変数に関する情報を格納する目的は何ですか?
- 29. 静的const配列はMSVCで動的に初期化されますか?
- 30. 動的に追加された行をデータベースに格納する方法mysql php
私たちは 'OPEN cursor_nameは呼び出す前に、データがコミットされた場合を考える;'、それはあまりにもそのデータをピックアップします。 –
カーソルは単にスペースを割り当てます。データセットはありません。これには、開いたクエリのデータセットが含まれています。 – XING
実行時にデータが正しく取得されるようにしますか?つまり、新しいデータがカーソルを開く時間枠に含まれ、カーソルを宣言すると、新しい行 –