|
|
|
![]() |
|
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: 07:03.