exponenta event banner

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

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

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

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

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

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

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

свернуть все

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

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

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

Представлен в R2006b