Запуск Oracle хранит процы из C # - PullRequest
3 голосов
/ 18 марта 2009

Вопрос для начинающих: У меня есть сохраненный процесс (просто процедура, без каких-либо пакетов) в базе данных Oracle:

CREATE OR REPLACE procedure FII_DBO.CLEAR_UNIT_TEST_PRODUCT
IS
BEGIN
 ...
END CLEAR_UNIT_TEST_PRODUCT;

и он прекрасно работает в TOAD. Однако, когда я пытаюсь запустить его из C #, он жалуется:

System.Data.OracleClient.OracleException: ORA-06550: line 1, column 7:
PLS-00201: identifier 'CLEAR_UNIT_TEST_PRODUCT' must be declared
ORA-06550: line 1, column 7:
PL/SQL: Statement ignored

соответствующий код C #:

Command = new OracleCommand();
Command.CommandText = procedureName;
Command.CommandType = CommandType.StoredProcedure;
Command.Connection = connection;
Command.ExecuteNonQuery();

Ответы [ 4 ]

3 голосов
/ 18 марта 2009

Убедитесь, что пользователь Oracle, к которому подключается ваше приложение .NET, имеет разрешения на выполнение хранимой процедуры.

1 голос
/ 18 марта 2009

Нашел, сообщение об ошибке немного вводило в заблуждение. Я выполнял это как другой пользователь, у которого не было надлежащих прав доступа. Это сделало трюк:

grant execute on FII_DBO.CLEAR_UNIT_TEST_PRODUCT to FII_USER;
0 голосов
/ 18 марта 2009

Ваша процедура создается в другой схеме.

Выпуск

ALTER SESSION SET CURRENT_SCHEMA = FII_DBO

сразу после подключения.

Напоминаю, что у провайдера есть некоторые ошибки при вызове хранимых процедур.

Установите CommandText на

BEGIN FII_DBO.CLEAR_UNIT_TEST_PRODUCT(); END;

и CommandType до Text

Также вы можете попытаться изменить регистр имени хранимой процедуры, например:

fii_dbo.clear_unit_test_product

, напомню, дело тоже имеет значение.

0 голосов
/ 18 марта 2009

Включаете ли вы имя пакета в переменную methodName?

т.е. установка имя_процесса на FII_DBO.CLEAR_UNIT_TEST_PRODUCT, а не просто CLEAR_UNIT_TEST_PRODUCT?

...