2009-03-18 18 views
3

Ein Anfänger Frage: Ich habe eine gespeicherte Prozedur (nur eine Prozedur, ohne Pakete) in der Oracle-Datenbank:Lauf Oracle gespeicherte Prozeduren aus C#

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

und es funktioniert in TOAD in Ordnung. Allerdings, wenn ich versuche, es von C# laufen sie klagt:

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 

relevant C# -Code:

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

Antwort

3

Überprüfen Sie, ob der Oracle-Benutzer, mit dem Ihre .NET-Anwendung verbunden ist, über Berechtigungen zum Ausführen der gespeicherten Prozedur verfügt.

+0

deklariert werden müssen ja, das war das Problem – Grzenio

+0

@Ian Nelson, @Grzenio - Ich habe ein ähnliches Problem. Derselbe Fehler und der C# -Code sieht sehr ähnlich aus, außer dass ich 'ExecuteReader()' benutze. Ich sehe nicht, wie es Berechtigungen sein könnte, da die Benutzer-ID, mit der ich mich verbinde, der Besitzer des Schemas und der spezifischen Prozeduren auch ist. Gibt es andere Gründe dafür? –

0

Sind auch Sie den Paketnamen in der Prozedur Variable?

d. H. Einstellung Prozedurname auf "FII_DBO.CLEAR_UNIT_TEST_PRODUCT", nicht nur "CLEAR_UNIT_TEST_PRODUCT"?

+0

Ja, versucht, dass auch: Bezeichner ‚FII_DBO.CLEAR_UNIT_TEST_PRODUCT‘ – Grzenio

0

Ihre Prozedur scheint in einem anderen Schema erstellt worden zu sein.

Ausgabe

ALTER SESSION SET CURRENT_SCHEMA = FII_DBO 

direkt nach dem Anschluss.

Ich erinnere mich, der Provider hat einige Fehler beim Aufruf gespeicherter Prozeduren.

Stellen Sie Ihren CommandText zu

BEGIN FII_DBO.CLEAR_UNIT_TEST_PRODUCT(); END; 

und CommandType-Text

Auch können Sie versuchen, den Fall zu ändern, von Ihnen Prozedurnamen gespeichert, wie:

fii_dbo.clear_unit_test_product 

, Ich erinnere mich, der Fall ist auch wichtig.

1

Gefunden, die Fehlermeldung war ein bisschen irreführend. Ich habe es als ein anderer Benutzer ausgeführt, der nicht die richtigen Zugriffsrechte hatte. Dies hat den Trick:

grant execute on FII_DBO.CLEAR_UNIT_TEST_PRODUCT to FII_USER; 
+1

Ja, die Fehlermeldung ist weniger als hilfreich, aber ich denke, der Gedanke ist, dass es aus Sicherheitsgründen getan wird. Wenn der Benutzer nicht auf die gespeicherte Prozedur zugreifen kann, wird die Datenbank nicht einmal seine Existenz zugeben. –

Verwandte Themen