|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: May 2006
Città: Wursteland
Messaggi: 1749
|
[PL/SQL] Matrice VARCHAR2
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ó ? Codice:
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;
/
__________________
Nintendo WIII 4d Turbo Intercooler - Sestium X 666 99,312 GHz - 6.984 Ram Σ(9999) MHz - HDD SATA 97e^(10) bytes 93³ rpm - ATI biberon X900z ∞Mb - Win Eight SP (1 > yours) 16 Valve |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: May 2006
Città: Wursteland
Messaggi: 1749
|
trovato:
TYPE NUM_ARRAY IS TABLE OF VARCHAR2(n);
__________________
Nintendo WIII 4d Turbo Intercooler - Sestium X 666 99,312 GHz - 6.984 Ram Σ(9999) MHz - HDD SATA 97e^(10) bytes 93³ rpm - ATI biberon X900z ∞Mb - Win Eight SP (1 > yours) 16 Valve |
|
|
|
|
|
#3 |
|
Senior Member
Iscritto dal: Jul 2005
Città: Bologna
Messaggi: 1130
|
Così non è una matrice. O meglio, è una matrice 1xN di varchar2(n).
Così a occhio eh...però forse non ho ben capito...
__________________
-> The Motherfucking Manifesto For Programming, Motherfuckers |
|
|
|
|
|
#4 | |
|
Senior Member
Iscritto dal: May 2006
Città: Wursteland
Messaggi: 1749
|
Quote:
![]() Grazie
__________________
Nintendo WIII 4d Turbo Intercooler - Sestium X 666 99,312 GHz - 6.984 Ram Σ(9999) MHz - HDD SATA 97e^(10) bytes 93³ rpm - ATI biberon X900z ∞Mb - Win Eight SP (1 > yours) 16 Valve |
|
|
|
|
|
|
#5 |
|
Senior Member
Iscritto dal: May 2006
Città: Wursteland
Messaggi: 1749
|
eccolo:
Codice:
TYPE NUM_ARRAY IS TABLE OF VARCHAR2(3) INDEX BY BINARY_INTEGER; Per dire che é una matrice basta aggiungere alla fine INDEX BY BINARY_INTEGER
__________________
Nintendo WIII 4d Turbo Intercooler - Sestium X 666 99,312 GHz - 6.984 Ram Σ(9999) MHz - HDD SATA 97e^(10) bytes 93³ rpm - ATI biberon X900z ∞Mb - Win Eight SP (1 > yours) 16 Valve |
|
|
|
|
|
#6 | |
|
Senior Member
Iscritto dal: Jul 2005
Città: Bologna
Messaggi: 1130
|
Quote:
Per avere una matrice vera e propria dovresti fare qualcosa tipo: Codice:
type t_columns is table of varchar2(3); type t_matrix is table of t_columns; my_matrix t_matrix;
__________________
-> The Motherfucking Manifesto For Programming, Motherfuckers |
|
|
|
|
|
|
#7 | |
|
Senior Member
Iscritto dal: May 2006
Città: Wursteland
Messaggi: 1749
|
Quote:
![]() varchar2 é giá un array quindi dicendo TABLE OF diventa un array di array = matrice, a intuito ovviamente. Tu invece fai un doppio passaggio, perché ? Comunque grazie
__________________
Nintendo WIII 4d Turbo Intercooler - Sestium X 666 99,312 GHz - 6.984 Ram Σ(9999) MHz - HDD SATA 97e^(10) bytes 93³ rpm - ATI biberon X900z ∞Mb - Win Eight SP (1 > yours) 16 Valve |
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 23:59.






















