Sdílet prostřednictvím


Použití uložené procedury s výstupními parametry

Stáhnout ovladač JDBC

Uložená procedura SQL Serveru, kterou můžete volat, je jedna, která vrací jeden nebo více parametrů OUT, což jsou parametry, které uložená procedura používá k vrácení dat zpět do volající aplikace. Ovladač Microsoft JDBC pro SQL Server poskytuje SQLServerCallableStatement třídy, kterou můžete použít k volání tohoto typu uložené procedury a zpracování dat, která vrací.

Při volání tohoto typu uložené procedury pomocí ovladače JDBC, musíte použít call SQL únikovou sekvenci společně s metodou prepareCall třídy SQLServerConnection. Pro únikovou sekvenci s parametry OUT je syntaxe následující:

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

Poznámka:

Další informace o SQL escape sekvencích naleznete v dokumentu Použití SQL escape sekvencí.

Při vytváření řídicí sekvence call zadejte parametry OUT pomocí znaku otazníku (?). Tento znak slouží jako zástupný symbol pro hodnoty parametrů vrácené z uložené procedury. Chcete-li zadat hodnotu parametru OUT, je nutné zadat datový typ každého parametru pomocí registerOutParameter metoda SQLServerCallableStatement třídy před spuštěním uložené procedury.

Hodnota, kterou zadáte pro parametr OUT v metodě registerOutParameter, musí být jedním z datových typů JDBC obsažených v java.sql.Types, které se pak mapují na jeden z nativních datových typů SQL Serveru. Další informace o datových typech JDBC a SQL Server naleznete v tématu Vysvětlení datových typů ovladače JDBC.

Když předáte hodnotu metodě registerOutParameter pro parametr OUT, musíte zadat nejen datový typ, který se má použít pro parametr, ale také pořadové umístění parametru nebo název parametru v uložené proceduře. Pokud například uložená procedura obsahuje jeden parametr OUT, jeho pořadová hodnota je 1. Pokud uložená procedura obsahuje dva parametry, první pořadová hodnota je 1 a druhá pořadová hodnota je 2.

Poznámka:

Ovladač JDBC nepodporuje použití datových typů CURSOR, SQLVARIANT, TABLE a TIMESTAMP SQL Serveru jako parametrů OUT.

Jako příklad vytvořte následující uloženou proceduru v ukázkové databázi AdventureWorks2025:

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

Tato uložená procedura vrátí jeden parametr OUT (managerID), což je celé číslo založené na zadaném parametru IN (employeeID), což je také celé číslo. Hodnota vrácená v parametru OUT je ManagerID založená na EmployeeID obsažené v HumanResources.Employee tabulce.

V následujícím příkladu se do funkce předá otevřené připojení k ukázkové databázi AdventureWorks2025 a metoda execute se používá k volání uložené procedury GetImmediateManager:

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));  
    }  
}

V tomto příkladu se k identifikaci parametrů používají pořadové pozice. Případně můžete parametr identifikovat pomocí jeho názvu místo jeho pořadové pozice. Následující příklad kódu upraví předchozí příklad tak, aby demonstroval, jak používat pojmenované parametry v aplikaci v Javě. Názvy parametrů odpovídají názvům parametrů v definici uložené procedury:

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"));  
    }  
}

Poznámka:

Tyto příklady používají metodu execute SQLServerCallableStatement třídy ke spuštění uložené procedury. Používá se, protože uložená procedura nevrátila také sadu výsledků. Pokud ano, použije se metoda executeQuery .

Uložené procedury můžou vracet počty aktualizací a více sad výsledků. Ovladač Microsoft JDBC pro SQL Server se řídí specifikací JDBC 3.0, která uvádí, že před načtením parametrů OUT by se mělo načíst více sad výsledků a počtu aktualizací. To znamená, že aplikace by měla před načtením parametrů OUT pomocí metod CallableStatement.getter načíst všechny objekty ResultSet a počet aktualizací. Jinak se při načtení parametrů OUT ztratí objekty ResultSet a počty aktualizací, které ovladač nenačetl. Další informace o počtech aktualizací a více sadách výsledků najdete v tématu Použití uložené procedury s počtem aktualizací a používáním více sad výsledků.

Viz také

Použití příkazů s uloženými procedurami