Avatar billede javanewbie11 Nybegynder
08. september 2003 - 15:06 Der er 6 kommentarer og
1 løsning

Kalde en Stored Procedure med Param

Nogen der kan hjælpe? Mit problem er, at det der står i while løkken ikke bliver skrevet ud....

// Stored procedure der skal kaldes.
CallableStatement cs = cnx.prepareCall("{? = call GetACustomerInfo[?]}");
       
// registrere input parametere
cs.setString(1, "156000");
       
ResultSet rs = cs.executeQuery();

if (rs.wasNull() == true)
{
  System.out.println("ResultSet indeholdet ingen rækker!");
}                       

while(rs.next())
{
  String lastName = rs.getString("lastName");
  System.out.println("Efternavn: "+lastName+"\n");
}

-------

Her er min Stored Procedure:

CREATE PROCEDURE GetACustomerInfo (@custId VarChar(10) ) AS

-- SQL Statementet
SELECT dbo.Customer.firstName, dbo.Customer.lastName, dbo.Customer.address, dbo.Customer.zipcode, dbo.Zipcode.city, dbo.Customer.phone,
dbo.Customer.email, dbo.Account.ballance, dbo.Customer.accountNo, dbo.Employee.title, dbo.Employee.firstName AS Expr1,
dbo.Employee.lastName AS Expr2, dbo.Employee.phone AS Expr3, dbo.Employee.email AS Expr4, dbo.Employee.dptNo,
dbo.Department.dptName
FROM dbo.Account INNER JOIN
dbo.Customer ON dbo.Account.accountNo = dbo.Customer.accountNo INNER JOIN
dbo.Employee ON dbo.Customer.employeeNo = dbo.Employee.employeeNo INNER JOIN
dbo.Department ON dbo.Employee.dptNo = dbo.Department.dptNo INNER JOIN
dbo.Zipcode ON dbo.Customer.zipcode = dbo.Zipcode.zipcode
WHERE dbo.Customer.customerNo = @custId

GO
Avatar billede magoo20000 Nybegynder
08. september 2003 - 15:14 #1
CallableStatement cs = cnx.prepareCall("{? = call GetACustomerInfo[?]}");

skal være

CallableStatement cs = cnx.prepareCall("{? = call GetACustomerInfo(?)}");
Avatar billede magoo20000 Nybegynder
08. september 2003 - 15:20 #2
Men din procedure har ingen returværdi, så hvorfor lave ("{? = call GetACustomerInfo(?)}");

Hvis det er en funktion skal du skrive ?= call xx(?)

Hvis det er en procedure skal du skrive call xx(?)

Ved funktioner er der en Return i slutningen af din SQL.
Avatar billede arne_v Ekspert
08. september 2003 - 15:22 #3
Jep.

Og:

cs.setString(1, "156000");
       
skal nok være:

cs.setString(2, "156000");

Og jeg ville nok kode result ste processingen anderledes.
Avatar billede arne_v Ekspert
08. september 2003 - 15:24 #4
Jeg lavede et glimrende (synes jeg selv !) eksempel her:

http://www.eksperten.dk/spm/387886

15/08-2003 21:46:15
Avatar billede arne_v Ekspert
08. september 2003 - 15:25 #5
Og hvis der skal returneres en værdi (hvad man vistnok normalt gør),
så skal typen af det argument angives med en registerOutParameter.
Avatar billede magoo20000 Nybegynder
08. september 2003 - 15:30 #6
Ja, fint eksempel.. Det viser det hele i en omgang (output, return og Resultset).
Avatar billede javanewbie11 Nybegynder
08. september 2003 - 16:51 #7
Tak for hjælpen:

Dette indlæg af Magoo20000 løste problemet:

Men din procedure har ingen returværdi, så hvorfor lave ("{? = call GetACustomerInfo(?)}");

Hvis det er en funktion skal du skrive ?= call xx(?)

Hvis det er en procedure skal du skrive call xx(?)

Ved funktioner er der en Return i slutningen af din SQL.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester