Nella mia applicazione voglio eseguire query come SELECT * FROM tbl WHERE col IN (@list) dove, @ elenco può avere numero variabile di valori. Sto usando il database del server MS SQL. Quando ho google Questo problema poi ho trovato questo linkChiamata stored procedure con parametro con valori di tabella da java
http://www.sommarskog.se/arrays-in-sql-2008.html
Questo link dice di usare il parametro con valori di tabella. Così ho creato il tipo di dati definiti dall'utente utilizzando Microsoft SQL Server Management Studio.
Crea tipo integer_list_tbltype come tabella (N non int NULL PRIMARY KEY)
Poi ho scritto stored procedure
CREATE PROCEDURE get_product_names @prodids integer_list_tbltype READONLY AS
SELECT p.ProductID, p.ProductName
FROM Northwind.dbo.Products p
WHERE p.ProductID IN (SELECT n FROM @prodids)
e quindi utilizzando Management Studio solo io eseguito questa procedura
DECLARE @mylist integer_list_tbltype
INSERT @mylist(n) VALUES(9),(12),(27),(37)
EXEC get_product_names @mylist
e mi sta dando l'output corretto. Ma mi sto chiedendo come chiamare questa stored procedure dal codice sorgente java. Io so come chiamare semplice stored procedure con numero costante di argomento
CallableStatement proc_stmt = null;
proc_stmt = con.prepareCall("{call test(?)}");
proc_stmt.setString(1,someValue);
ma come chiamare stored procedure in caso di parametri di tabella valore?
Il problema con questo approccio è che potrebbe riempire la cache dell'istruzione. –
@ngund Ciao, ho provato questa soluzione, e se ho capito bene, ho fatto quanto segue: m_cStatement.setString ("'1,2,3'")); e poi ho ottenuto la seguente eccezione: "Operando type clash: nvarchar è incompatibile con udt_UsersById". Potete consigliare per favore? (Ho pubblicato una domanda su http://stackoverflow.com/questions/31161789/what-is-the-java-equivalent-to-sql-user-defined-table-type ed è stata contrassegnata come duplicata. guarda per favore?) 10X! – dushkin
Il problema è che potrebbe aprirti all'iniezione sql –