Поделиться через


Использование хранимых процедур с состояниями возврата

Скачать драйвер JDBC

Вызываемая хранимая процедура SQL Server — это процедура, которая возвращает параметр состояния или параметр результата. Обычно это состояние используется для указания успешного выполнения или ошибки хранимой процедуры. Microsoft JDBC Driver для SQL Server предоставляет класс SQLServerCallableStatement, который можно использовать для вызова этого типа хранимой процедуры и обработки возвращаемых ею данных.

При вызове хранимой процедуры этого типа с помощью драйвера JDBC следует использовать escape-последовательность SQL call совместно с методом prepareCall класса SQLServerConnection. Ниже приводится синтаксис escape-последовательности call с возвращаемым параметром состояния:

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

Примечание.

Дополнительные сведения об использовании escape-последовательностей в SQL см. в этой статье.

При создании escape-последовательности call укажите возвращаемый параметр состояния с помощью символа ? (знак вопроса). Этот символ выполняет роль заполнителя для значения параметра, которое будет возвращено из хранимой процедуры. Чтобы указать значение возвращаемого параметра состояния, необходимо задать тип данных параметра с помощью метода registerOutParameter класса SQLServerCallableStatement до выполнения хранимой процедуры.

Примечание.

При использовании драйвера JDBC с базой данных SQL Server значение, указываемое для возвращаемого параметра состояния в методе registerOutParameter, всегда будет целым числом, которое можно задать с помощью типа данных java.sql.Types.INTEGER.

Кроме того, при передаче значения методу registerOutParameter для возвращаемого параметра состояния необходимо указать не только тип данных, который будет использоваться для параметра, но также порядковое размещение параметра в вызове хранимой процедуры. Порядковое местоположение возвращаемого параметра состояния всегда будет 1, поскольку этот параметр всегда является первым в вызове в хранимой процедуры. Хотя класс SQLServerCallableStatement обеспечивает поддержку использования имени параметра для указания определенного параметра, для возвращаемых параметров состояния можно использовать только номер порядкового местоположения.

Например, создайте следующую хранимую процедуру в примере базы данных AdventureWorks2022:

CREATE PROCEDURE CheckContactCity  
   (@cityName CHAR(50))  
AS  
BEGIN  
   IF ((SELECT COUNT(*)  
   FROM Person.Address  
   WHERE City = @cityName) > 1)  
   RETURN 1  
ELSE  
   RETURN 0  
END  

Эта хранимая процедура возвращает значение состояния 1 или 0, в зависимости от того, включен ли город, указанный в параметре cityName, в таблицу Person.Address.

В следующем примере открытое подключение к образцу базы данных AdventureWorks2022 передается в функцию, а метод выполнения используется для вызова хранимой процедуры CheckContactCity:

public static void executeStoredProcedure(Connection con) {
    try(CallableStatement cstmt = con.prepareCall("{? = call dbo.CheckContactCity(?)}");) {
        cstmt.registerOutParameter(1, java.sql.Types.INTEGER);
        cstmt.setString(2, "Atlanta");
        cstmt.execute();
        System.out.println("RETURN STATUS: " + cstmt.getInt(1));
    }
    // Handle any errors that may have occurred.
    catch (SQLException e) {
        e.printStackTrace();
    }
}

См. также

Использование инструкций с хранимыми процедурами