trallallero
06-03-2007, 16:04
Ho fatto una procedura che prende a blocchi di n records alla volta
dove n é passato come parametro e per adesso stampa a video.
Dovrei invece copiare i valori ottenuti in una matrice passata sempre
come parametro. Si puó ?
SET SERVEROUTPUT ON SIZE 1000000
CREATE OR REPLACE PROCEDURE MY_PROC( n IN number )
AS
c NUMBER;
d NUMBER;
n_tab DBMS_SQL.varchar2_Table;
indx NUMBER := 1;
BEGIN
c := DBMS_SQL.OPEN_CURSOR;
DBMS_SQL.PARSE(c, 'select distinct SS from MY_TABLE order by SS', 1);
DBMS_SQL.DEFINE_ARRAY(c, 1, n_tab, n, indx);
d := DBMS_SQL.EXECUTE(c);
LOOP
d := DBMS_SQL.FETCH_ROWS(c);
DBMS_SQL.COLUMN_VALUE(c, 1, n_tab);
FOR i in n_tab.FIRST .. n_tab.LAST
LOOP
DBMS_OUTPUT.PUT_LINE(n_tab(i));
-- QUI ANDREBBERO COPIATI I VALORI IN MATRICE
END LOOP;
EXIT WHEN d != n;
END LOOP;
DBMS_SQL.CLOSE_CURSOR(c);
EXCEPTION
WHEN OTHERS THEN
IF dbms_sql.is_open(c) THEN
DBMS_SQL.CLOSE_CURSOR(c);
END IF;
END;
/
grazie :)
dove n é passato come parametro e per adesso stampa a video.
Dovrei invece copiare i valori ottenuti in una matrice passata sempre
come parametro. Si puó ?
SET SERVEROUTPUT ON SIZE 1000000
CREATE OR REPLACE PROCEDURE MY_PROC( n IN number )
AS
c NUMBER;
d NUMBER;
n_tab DBMS_SQL.varchar2_Table;
indx NUMBER := 1;
BEGIN
c := DBMS_SQL.OPEN_CURSOR;
DBMS_SQL.PARSE(c, 'select distinct SS from MY_TABLE order by SS', 1);
DBMS_SQL.DEFINE_ARRAY(c, 1, n_tab, n, indx);
d := DBMS_SQL.EXECUTE(c);
LOOP
d := DBMS_SQL.FETCH_ROWS(c);
DBMS_SQL.COLUMN_VALUE(c, 1, n_tab);
FOR i in n_tab.FIRST .. n_tab.LAST
LOOP
DBMS_OUTPUT.PUT_LINE(n_tab(i));
-- QUI ANDREBBERO COPIATI I VALORI IN MATRICE
END LOOP;
EXIT WHEN d != n;
END LOOP;
DBMS_SQL.CLOSE_CURSOR(c);
EXCEPTION
WHEN OTHERS THEN
IF dbms_sql.is_open(c) THEN
DBMS_SQL.CLOSE_CURSOR(c);
END IF;
END;
/
grazie :)