Ciao a tutti, è possibile fare il select dipendente con oracle?

codice:
<select name="slcditta" id="slcditta" onchange="dennis(this[this.selectedIndex].value)"">
            <%
While (NOT ditta.EOF)
%>
            <option value="<%=(ditta.Fields.Item("ID_SOC_ESTERNA").Value)%>"><%=(ditta.Fields.Item("RAGIONE_SOCIALE").Value)%></option>
            <%
  ditta.MoveNext()
Wend
If (ditta.CursorType > 0) Then
  ditta.MoveFirst
Else
  ditta.Requery
End If
%>
          </select></td>
          <td width="77"></td>
        </tr>
        <tr>
          <td class="style1">Personale:</td>
          <td colspan="2"><select name="select3" size="5" multiple="MULTIPLE">
            <%
if request.Form("slcditta") <> "" then
	While (NOT tecnici_est.EOF)
	%>
            <option value="<%=(tecnici_est.Fields.Item("ID_TECNICO_EST").Value)%>"><%=(tecnici_est.Fields.Item("COGNOME").Value)%></option>
            <%
	  tecnici_est.MoveNext()
	Wend
	If (tecnici_est.CursorType > 0) Then
	  tecnici_est.MoveFirst
	Else
	  tecnici_est.Requery
	End If
end if
%>
          </select>
ho già provato a fare il select
codice:
<%
Dim tecnici_est
Dim tecnici_est_numRows

Set tecnici_est = Server.CreateObject("ADODB.Recordset")
tecnici_est.ActiveConnection = MM_siman_STRING
if request.Form("slcditta") <> "" then
	tecnici_est.Source = "SELECT * FROM SIMAN.TECNICI_SOC_ESTERNE where ID_SOC_ESTERNA = " & request.Form("slcditta")
	tecnici_est.CursorType = 0
	tecnici_est.CursorLocation = 2
	tecnici_est.LockType = 1
	tecnici_est.Open()
	tecnici_est_numRows = 0
end if
%>
ho provato a girare in questo forum sui select dipendenti, ma il problema è che dovrei scrivere ogni array, le società sono mille e i tecnici esterni sono di più.

ho provato in questo modo simile:
codice:
arr0 = ["Torino", "Asti"]
arr00 = ["Torino","Maglione","Massello","Bosconero","Bonzo"]

var arrReg
arrReg = [arr0, arr1, arr2]

//	Function to handle dynamically altering the contents of the Reg List box
function RegChange(newDisplay)
{	var RegSelect, ProSelect, ComSelect, NumEntries, i
	RegSelect = document.nav.Reg
	ProSelect = document.nav.Pro
	ComSelect = document.nav.Com

	//	Azzero Province
	for (i = ProSelect.length; i > 0; i--) { ProSelect.options[i-1] = null }

	//	Aggiungi Commento
	ProSelect.options[0] = new Option("-- Seleziona la Provincia --",-1)

	//	If Reg is selected add its Province to the Province List box
	if (newDisplay >= 0)
	{	NumEntries = arrReg[newDisplay].length
		for (i = 1; i <= NumEntries; i++) {	ProSelect.options[i] = new  Option((arrReg[newDisplay])[i-1],(i-1))	}
	}
	ProSelect.selectedIndex = 0
	ProChange()
}

//	Function to handle dynamically altering the contents of the Pro List box
function ProChange(newDisplay)
{	var RegSelect, ProSelect, ComSelect, NumEntries, i
	RegSelect = document.nav.Reg
	ProSelect = document.nav.Pro
	ComSelect = document.nav.Com

	//	Delete all entries in the Com list box
	for (i = ComSelect.length; i > 0; i--) { ComSelect.options[i-1] = null }

	//	Add comment option to Com List box
	ComSelect.options[0] = new Option("-- Seleziona il Comune --",-1)

	//	If Pro is selected add its Numeri to the Numeri List box
	if (newDisplay >= 0)
	{	tempNumeri = eval("arr"+RegSelect[RegSelect.selectedIndex].value+newDisplay) 
		NumEntries = tempNumeri.length
		for (i = 1; i <= NumEntries; i++) { ComSelect.options[i] = new Option(tempNumeri[i-1],i-1) }
	}
	ComSelect.selectedIndex = 0
}
Visto che con gli array, vorrei che sia dinamica...
Come si fa?? Mi fa un pò impazzire questo scripting
Grazie