runstoredprocedure

Вызов хранимой процедуры с входными и выходными аргументами и без них

Описание

Эта функция вызывает хранимую процедуру, которая не имеет ни входных параметров, ни выходных аргументов, ни любой комбинации входа и выходных аргументов. Определите и создайте экземпляры этой хранимой процедуры в базе данных.

Можно использовать эту функцию, если подключиться к базе данных с помощью драйвера JDBC. Для получения дополнительной информации см. раздел «Подключение к базе данных». Если вы используете собственный интерфейс ODBC для подключения к базе данных, используйте exec вызов хранимой процедуры.

пример

results = runstoredprocedure(conn,spname) вызывает хранимую процедуру spname использование подключения к базе данных conn. results является логическим 1 если сохраненная процедура возвращает набор данных. В противном случае results является логическим 0.

пример

results = runstoredprocedure(conn,spname,inputargs) вызывает хранимую процедуру, которая принимает один или несколько входных параметров inputargs.

пример

results = runstoredprocedure(conn,spname,inputargs,outputtypes) вызывает хранимую процедуру, которая возвращает выходные аргументы путем определения типов данных выходных аргументов outputtypes. results - массив ячеек, содержащий один или несколько выходных аргументов.

Примеры

свернуть все

Задайте хранимую процедуру с именем create_table который создает таблицу с именем test_table при выполнении этого кода. Эта процедура не имеет никаких входных или выходных аргументов. Этот код предполагает, что вы используете Microsoft® SQL Server® база данных.

CREATE PROCEDURE create_table 
	
AS
BEGIN
	-- SET NOCOUNT ON added to prevent extra result sets from
	-- interfering with SELECT statements.
	SET NOCOUNT ON;

CREATE TABLE test_table
	 (
		CATEGORY_ID     INTEGER     IDENTITY PRIMARY KEY,
		CATEGORY_DESC   CHAR(50)    NOT NULL
        );
	
END
GO

Создайте подключение к базе данных Microsoft SQL Server conn использование драйвера JDBC. Для получения дополнительной информации см. раздел «Подключение к базе данных». Затем вызовите хранимую процедуру create_table использование подключения к базе данных conn.

results = runstoredprocedure(conn,'create_table')
results = 

   0

results возвращает 0, потому что вызывает create_table не возвращает набор данных.

Проверьте базу данных на наличие новой таблицы с именем test_table.

Закройте подключение к базе данных conn.

close(conn)

Задайте хранимую процедуру с именем insert_data который вставляет описание категории в таблицу с именем test_create при выполнении этого кода. Эта процедура имеет один входной параметр data. Этот код предполагает, что вы используете базу данных Microsoft SQL Server.

CREATE PROCEDURE insert_data 
	@data varchar(50)

AS
BEGIN
	-- SET NOCOUNT ON added to prevent extra result sets from
	-- interfering with SELECT statements.
	SET NOCOUNT ON;

	INSERT INTO test_create (CATEGORY_DESC) 
	VALUES (@data)
END
GO

Создайте подключение к базе данных Microsoft SQL Server conn использование драйвера JDBC. Для получения дополнительной информации см. раздел «Подключение к базе данных». Затем вызовите хранимую процедуру insert_data использование подключения к базе данных conn с описанием категории Apples как входной параметр.

inputarg = {'Apples'};

results = runstoredprocedure(conn,'insert_data',inputarg)
results =

   0

results возвращает 0, потому что вызывает insert_data не возвращает набор данных.

Таблица test_create добавляет строку, где столбец CATEGORY_ID равен 1 и столбец CATEGORY_DESCRIPTION равен Apples.

CATEGORY_ID является первичным ключом таблицы test_create. Этот первичный ключ автоматически увеличивается. CATEGORY_ID равен 1 при вызове insert_data впервые.

Закройте подключение к базе данных conn.

close(conn)

Задайте хранимую процедуру с именем maxDecVolume который выбирает максимальный объем продаж в декабре путем выполнения этого кода. Эта процедура имеет один выходной аргумент data и никаких входных параметров. Этот код предполагает, что вы используете базу данных Microsoft SQL Server.

CREATE PROCEDURE maxDecVolume
	@data int OUTPUT 
AS
BEGIN
	-- SET NOCOUNT ON added to prevent extra result sets from
	-- interfering with SELECT statements.
	SET NOCOUNT ON;

 	SELECT @data = max(December) FROM salesVolume
END

GO

Создайте подключение к базе данных Microsoft SQL Server conn использование драйвера JDBC. Для получения дополнительной информации см. раздел «Подключение к базе данных». Затем вызовите хранимую процедуру с помощью:

  • Подключение к базе данных conn

  • Сохраненные maxDecVolume процедуры

  • Пустые скобки, чтобы обозначить отсутствие входных параметров

  • Числовой Java® тип данных outputtype

outputtype = {java.sql.Types.NUMERIC};

results = runstoredprocedure(conn,'maxDecVolume',[],outputtype)
results = 

    [1x1 java.math.BigDecimal]

results возвращает массив ячеек, который содержит максимальный объем продаж в виде десятичного типа данных Java.

Отобразите значение в results.

results{1}
ans =
 
35000 

Максимальный объем продаж в декабре - 35 000.

Закройте подключение к базе данных conn.

close(conn)

Задайте хранимую процедуру с именем getSuppCount который подсчитывает количество поставщиков для заданного города путем выполнения этого кода. Эта процедура имеет один входной параметр cityName и один выходной аргумент suppCount. Этот код предполагает, что вы используете базу данных Microsoft SQL Server.

CREATE PROCEDURE getSuppCount 
	(@cityName varchar(20),
	 @suppCount int OUTPUT)
AS
BEGIN
	-- SET NOCOUNT ON added to prevent extra result sets from
	-- interfering with SELECT statements.
	SET NOCOUNT ON;
	
	SELECT @suppCount = count(supplierNumber)
 FROM suppliers WHERE City = @cityName;
	
END
GO

Создайте подключение к базе данных Microsoft SQL Server conn использование драйвера JDBC. Для получения дополнительной информации см. раздел «Подключение к базе данных». Затем вызовите хранимую процедуру getSuppCount использование подключения к базе данных conn. Входной параметр inputarg - массив ячеек, содержащий вектор символов 'New York'. Тип выходных данных Java outputtype является числовым.

inputarg = {'New York'};
outputtype = {java.sql.Types.NUMERIC};

results = runstoredprocedure(conn,'getSuppCount',inputarg,outputtype)
results = 

    [1x1 java.math.BigDecimal]

results - массив ячеек, содержащий количество поставщиков в виде десятичного типа данных Java.

Отобразите значение в results.

results{1}
ans =
 
6.0000

В Нью-Йорке шесть поставщиков.

Закройте подключение к базе данных conn.

close(conn)

Задайте хранимую процедуру с именем productsWithinUnitCost который возвращает номер продукта и описание для продуктов с модулем стоимостью в заданную область путем выполнения этого кода. Эта процедура имеет два входных параметров minUnitCost и maxUnitCost. Эта процедура имеет два выходных аргументов productno и productdesc. Этот код предполагает, что вы используете базу данных Microsoft SQL Server.

CREATE PROCEDURE productsWithinUnitCost
	(@minUnitCost INT, 
	@maxUnitCost INT,
	@productno INT OUTPUT, 
	@productdesc VARCHAR(50) OUTPUT)
AS
BEGIN
	-- SET NOCOUNT ON added to prevent extra result sets from
	-- interfering with SELECT statements.
	SET NOCOUNT ON;

 SELECT @productno = productNumber, @productdesc = productDescription
 FROM productTable
	WHERE unitCost > @minUnitCost AND unitCost < @maxUnitCost
END


GO

Создайте подключение к базе данных Microsoft SQL Server conn использование драйвера JDBC. Для получения дополнительной информации см. раздел «Подключение к базе данных». Затем вызовите хранимую процедуру с помощью:

  • Подключение к базе данных conn

  • Сохраненные productsWithinUnitCost процедуры

  • Входные параметры inputargs для определения стоимости модуля в диапазоне от 19 до 21

  • Вывод типов данных Java outputtypes для определения числовых и строковых типов данных для номера продукта и описания

inputargs = {19,21};
outputtypes = {java.sql.Types.NUMERIC,java.sql.Types.VARCHAR};

results = runstoredprocedure(conn,'productsWithinUnitCost',...
                             inputargs,outputtypes)
results = 

    [1x1 java.math.BigDecimal]
    'Snacks'                  

results возвращает массив ячеек, который содержит номер продукта в виде десятичного типа данных Java и описание продукта в виде строки.

Отобразите номер продукта в results.

results{1}
ans =
 
15

Продукт с номером продукта 15 имеет стоимость модуля от 19 до 21.

Отобразите описание продукта в results.

results{2}
ans =

Snacks

Продукт с номером продукта 15 имеет описание продукта Snacks.

Здесь узкая область значений единичных затрат возвращает только один продукт. Если область значений единичных затрат шире, то это условие может удовлетворять более чем одному продукту. Чтобы вернуть набор данных с многочисленными продуктами, используйте exec и fetch для вызова этой хранимой процедуры. В противном случае, runstoredprocedure возвращает только последнюю строку в наборе данных.

Закройте подключение к базе данных conn.

close(conn)

Входные параметры

свернуть все

Подключение к базе данных, заданное как ODBC connection объект или JDBC connection объект, созданный с использованием database функция.

Имя хранимой процедуры, заданное как вектор символов, содержащий имя хранимой процедуры, заданное и созданное в базе данных.

Типы данных: char

Входные параметры, заданные как массив ячеек из одного или нескольких значений для каждого входного параметра хранимой процедуры. Входные параметры могут быть только основные типы данных, такие как double, вектор символов, logical и так далее.

Типы данных: cell

Выходные типы, заданные как массив ячеек одного или нескольких типов данных Java для выходных аргументов хранимой процедуры. Некоторые драйверы JDBC не поддерживают все java.sql.Types. Для поиска поддерживаемых типов см. документацию по драйверу JDBC. Сопоставьте их с типами данных, найденными в вашей хранимой процедуре.

Пример: {java.sql.Types.NUMERIC}

Типы данных: cell

Выходные аргументы

свернуть все

Результаты хранимой процедуры, возвращенные как логический массив или массив ячеек.

runstoredprocedure возвращает логическое 1 при вызове хранимой процедуры возвращает набор данных. В противном случае, runstoredprocedure возвращает логическое 0. Если хранимая процедура возвращает набор данных, используйте exec и fetch для вызова хранимой процедуры и извлечения набора данных. Для получения дополнительной информации смотрите Хранимая процедура вызова, которая возвращает данные.

runstoredprocedure возвращает массив ячеек, когда вы задаете один или несколько выходных типов данных Java для выходных аргументов хранимой процедуры. Используйте индексацию массива ячеек, чтобы получить значения выходных аргументов.

Введенный в R2006b