Delen via


Een opgeslagen procedure gebruiken met uitvoerparameters

JDBC-stuurprogramma downloaden

Een opgeslagen SQL Server-procedure die u kunt aanroepen, is een procedure die een of meer OUT-parameters retourneert. Dit zijn parameters die door de opgeslagen procedure worden gebruikt om gegevens terug te sturen naar de aanroepende toepassing. Het Microsoft JDBC-stuurprogramma voor SQL Server biedt de klasse SQLServerCallableStatement , die u kunt gebruiken om dit type opgeslagen procedure aan te roepen en de gegevens te verwerken die worden geretourneerd.

Wanneer u dit type opgeslagen procedure aanroept met behulp van het JDBC-stuurprogramma, moet u de call SQL-escapereeks samen met de prepareCall-methode van de klasse SQLServerConnection gebruiken. Voor de call escape-reeks met OUT-parameters is de syntaxis als volgt:

{call procedure-name[([parameter][,[parameter]]...)]}

Opmerking

Zie Sql-escapereeksen gebruiken voor meer informatie over de SQL-escapereeksen.

Wanneer u de call escapereeks maakt, geeft u de OUT-parameters op met behulp van het vraagteken (?). Dit teken fungeert als tijdelijke aanduiding voor de parameterwaarden die worden geretourneerd door de opgeslagen procedure. Als u een waarde voor een OUT-parameter wilt opgeven, moet u het gegevenstype van elke parameter opgeven met behulp van de methode registerOutParameter van de klasse SQLServerCallableStatement voordat u de opgeslagen procedure uitvoert.

De waarde die u opgeeft voor de OUT-parameter in de methode registerOutParameter moet een van de JDBC-gegevenstypen zijn die zijn opgenomen in java.sql.Types, die op zijn beurt worden toegewezen aan een van de systeemeigen SQL Server-gegevenstypen. Voor meer informatie over JDBC en SQL Server gegevenstypen, zie Inzicht in de gegevenstypen van de JDBC-stuurprogramma.

Wanneer u een waarde doorgeeft aan de registerOutParameter-methode voor een OUT-parameter, moet u niet alleen het gegevenstype opgeven dat moet worden gebruikt voor de parameter, maar ook de ordinale plaatsing van de parameter of de naam van de parameter in de opgeslagen procedure. Als uw opgeslagen procedure bijvoorbeeld één OUT-parameter bevat, is de rangtelwaarde 1. Als de opgeslagen procedure twee parameters bevat, is de eerste rangtelwaarde 1 en de tweede rangtelwaarde 2.

Opmerking

Het JDBC-stuurprogramma biedt geen ondersteuning voor het gebruik van de gegevenstypen CURSOR, SQLVARIANT, TABLE, en TIMESTAMP van SQL Server als OUT-parameters.

Maak bijvoorbeeld de volgende opgeslagen procedure in de voorbeelddatabase AdventureWorks2025:

CREATE PROCEDURE GetImmediateManager  
   @employeeID INT,  
   @managerID INT OUTPUT  
AS  
BEGIN  
   SELECT @managerID = ManagerID
   FROM HumanResources.Employee
   WHERE EmployeeID = @employeeID  
END

Deze opgeslagen procedure retourneert één OUT-parameter (managerID), een geheel getal, gebaseerd op de opgegeven IN-parameter (employeeID), wat ook een geheel getal is. De waarde die wordt geretourneerd in de OUT-parameter is de ManagerID op basis van de EmployeeID die is opgenomen in de HumanResources.Employee tabel.

In het volgende voorbeeld wordt een open verbinding met de voorbeelddatabase AdventureWorks2025 doorgegeven aan de functie en wordt de methode execute gebruikt om de opgeslagen procedure GetImmediateManager aan te roepen:

public static void executeStoredProcedure(Connection con) throws SQLException {  
    try(CallableStatement cstmt = con.prepareCall("{call dbo.GetImmediateManager(?, ?)}");) {  
        cstmt.setInt(1, 5);  
        cstmt.registerOutParameter(2, java.sql.Types.INTEGER);  
        cstmt.execute();  
        System.out.println("MANAGER ID: " + cstmt.getInt(2));  
    }  
}

In dit voorbeeld worden de rangtelposities gebruikt om de parameters te identificeren. U kunt ook een parameter identificeren met behulp van de naam ervan in plaats van de rangschikkelijkheid. In het volgende codevoorbeeld wordt het vorige voorbeeld gewijzigd om te laten zien hoe u benoemde parameters gebruikt in een Java-toepassing. Parameternamen komen overeen met de parameternamen in de definitie van de opgeslagen procedure:

public static void executeStoredProcedure(Connection con) throws SQLException {  
    try(CallableStatement cstmt = con.prepareCall("{call dbo.GetImmediateManager(?, ?)}"); ) {  
        cstmt.setInt("employeeID", 5);  
        cstmt.registerOutParameter("managerID", java.sql.Types.INTEGER);  
        cstmt.execute();  
        System.out.println("MANAGER ID: " + cstmt.getInt("managerID"));  
    }  
}

Opmerking

In deze voorbeelden wordt de uitvoeringsmethode van de klasse SQLServerCallableStatement gebruikt om de opgeslagen procedure uit te voeren. Dit wordt gebruikt omdat de opgeslagen procedure geen resultatenset heeft geretourneerd. Als dat het gebeurt, wordt de executeQuery-methode gebruikt.

Opgeslagen procedures kunnen updateaantallen en meerdere resultatensets retourneren. Het Microsoft JDBC-stuurprogramma voor SQL Server volgt de JDBC 3.0-specificatie, waarin staat dat meerdere resultatensets en updateaantallen moeten worden opgehaald voordat de OUT-parameters worden opgehaald. Dat wil gezegd, moet de toepassing alle ResultSet-objecten ophalen en tellingen bijwerken voordat de OUT-parameters worden opgehaald met behulp van de CallableStatement.getter-methoden. Anders gaan de ResultSet-objecten en updateaantallen die het stuurprogramma niet heeft opgehaald verloren wanneer de OUT-parameters worden opgehaald. Zie Een opgeslagen procedure gebruiken met een aantal updates en meerdere resultatensets voor meer informatie over het aantal updates en het gebruik van meerdere resultatensets.

Zie ook

Instructies gebruiken met opgeslagen procedures