Академический Документы
Профессиональный Документы
Культура Документы
sql
REM Chapter 12, Oracle9i PL/SQL Programming by Scott Urman
REM This script illustrates several different BULK_COLLECT
REM statements, used for bulk binds
DECLARE
TYPE t_Numbers IS TABLE OF temp_table.num_col%TYPE;
TYPE t_Strings IS TABLE OF temp_table.char_col%TYPE;
v_Numbers t_Numbers := t_Numbers(1);
v_Strings t_Strings := t_Strings(1);
v_Numbers2 t_Numbers;
v_Strings2 t_Strings;
CURSOR c_char IS
SELECT char_col
FROM temp_table
WHERE num_col > 800
ORDER BY num_col;
BEGIN
-- First load temp_table with 1500 rows, 500 of which are
-- duplicates.
v_Numbers.EXTEND(1500);
v_Strings.EXTEND(1500);
FOR v_Count IN 1..1000 LOOP
v_Numbers(v_Count) := v_Count;
v_Strings(v_Count) := 'Element #' || v_Count;
IF v_Count > 500 THEN
v_Numbers(v_Count + 500) := v_Count;
v_Strings(v_Count + 500) := 'Element #' || v_Count;
END IF;
END LOOP;
-- Grab all of the rows back into the nested tables in one
-- operation.
SELECT num_col, char_col
BULK COLLECT INTO v_Numbers, v_Strings
FROM temp_table
ORDER BY num_col;
DBMS_OUTPUT.PUT_LINE(
'First query fetched ' || v_Numbers.COUNT || ' rows');
DBMS_OUTPUT.PUT_LINE(
'Second query fetched ' || v_Numbers2.COUNT || ' rows');
DBMS_OUTPUT.PUT_LINE(
'Cursor fetch retrieved ' || v_Strings2.COUNT || ' rows');
END;
/
DECLARE
TYPE t_Numbers IS TABLE OF temp_table.num_col%TYPE
INDEX BY BINARY_INTEGER;
TYPE t_Strings IS TABLE OF temp_table.char_col%TYPE
INDEX BY BINARY_INTEGER;
v_Numbers t_Numbers;
v_Strings t_Strings;
BEGIN
-- Delete from the table, and then insert 55 rows. Also set
-- up t_Numbers here.
DELETE FROM temp_table;
FOR v_Outer IN 1..10 LOOP
FOR v_Inner IN 1..v_Outer LOOP
INSERT INTO temp_table (num_col, char_col)
VALUES (v_Outer, 'Element #' || v_Inner);
END LOOP;
v_Numbers(v_Outer) := v_Outer;
END LOOP;