Frage

Alle,

Ich bin sehr neu in der Regel zu Stored Procedures, aber ich habe Schwierigkeiten vor allem mit dem in Oracle. Ich habe ein sehr einfaches Beispiel geschaffen, was ich zu tun versuchen, und ich bin immer noch den gleichen Fehler mit dieser vereinfachten Version zu bekommen.

Das Beispiel gespeicherte Prozedur ist wie folgt:

CREATE OR REPLACE PROCEDURE ashish_test
AUTHID CURRENT_USER IS
BEGIN
     DECLARE
          v_tab     VARCHAR2(50);
          v_strSQL  VARCHAR2(50);
     BEGIN
          v_strSQL := 'SELECT * FROM :1';
          v_tab    := 'ex.emp';
          EXECUTE IMMEDIATE v_strSQL USING v_tab;
     END;
END;

Wenn ich die oben gespeicherte Prozedur CALL ashish_test() aufrufen, erhalte ich:

Fehlermeldung http://web1.twitpic.com/img /12831839-06a3ea536df5d5a0a839eb83d9e59d25.4a3936b8-scaled.jpg

Basierend auf diesem Artikel (Suchen Sie nach Beispiel 7-1), sollte USING Schlüsselwort die nummerierte Platzhalter (:1) innerhalb v_strSQL mit dem Wert in v_tab gespeichert ersetzen. Allerdings halte ich ungültige Tabelle Fehler. Ich vermute, es ist, weil EXECUTE IMMEDIATE kann den Platzhalter mit dem Wert aus irgendeinem Grunde ersetzen, aber ich bin nicht sicher, warum das so ist. Weiß jemand, ob ich hier etwas Dummes tue?

Ich verwende diese auf Oracle 10g Datenbank und mit PL / SQL Developer.

War es hilfreich?

Lösung

Die USING-Klausel ist nur für Bind-Variablen (das heißt, wo Sie Spaltennamen in einer select-Anweisung verwenden würden), nicht Tabellennamen. Typische Anwendungen würden wie folgt aussehen:

Select col1 from table1 where col2 = :a

Wenn Sie möchten, verwenden variable Tabellennamen verwenden, etwa so:

         v_tab    := 'ex.emp';
         v_strSQL := 'SELECT * FROM ' || v_tab;
         EXECUTE IMMEDIATE v_strSQL;
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top