Drucken Fehlermeldung in der Konsole von DB2-Prozedur
Gibt es eine andere einfache Möglichkeit zum drucken Nachricht in der Konsole von DB2-Prozedur, ohne DB2_COMPATIBILITY_VECTOR=ORA in der registry?
- ...warum wollen Sie die Ausgabe auf eine Konsole? Welche Konsole? Wie wollen Sie auf die Prozedur aufruft... und was die gesamte Kette?
- die einfache Forderung zu Tabelle kopieren von einem schema zu einem anderen schema. Nun ich geschrieben habe, eine Prozedur, die dauert 4 Parameter 1. Quell-Schema 2. Ziel-Schema, 3. Quelle Tabelle 4. Target-Tabelle. und die Absicht ist, wenn der Benutzer eine falsche Eingabe, wie ungültige Quell-schema oder ungültige Quell-Tabelle dann Verfahren werfen sollten Fehler mit Fehlermeldung. Nun, um zu zeigen, dass die Fehlermeldung, die ich drucken möchte in der Konsole
- ...ähm, würde nicht jedoch, Sie mit der Erklärung in der Lage sein, zu drucken, Fehler-codes, die Sie bekommen schon? Die meisten Anweisung Läufer ich bin mir dessen bewusst wird, kreischen Sie mit was auch immer geworfen wurde. Plus, was passiert, wenn Sie nicht ausgeführt wird, durch eine regelmäßige Konsole - sagen, es ist in einer anderen Prozedur aufgerufen, die ein ORM-Instanz oder unbeaufsichtigt laufen sowieso? Dies ist auch relevant, weil es die vorhandenen codes für diese Elemente zu fehlen, (obwohl Sie benötigen, werfen Sie sich selbst als Validierung, Risiko oder SQL-Injection). Wie sind Sie mit der Planung zum Umgang mit den einzelnen Datenspalten?
- Unten finden Sie die Beispiel-code, was ich versuche.. es ist derzeit werfen Kompilierungsfehler ..
CREATE OR REPLACE PROCEDURE COPY_TABLE( IN SRC_SCMA VARCHAR(30), IN TGT_SCMA VARCHAR(30), IN SRC_TBL VARCHAR(50), IN TGT_TBL VARCHAR(50) ) LANGUAGE SQL CALLED ON NULL INPUT BEGIN DECLARE a INT; DECLARE d INT; SELECT COUNT(1) INTO a FROM SYSCAT.SCHEMATA WHERE SCHEMANAME = UCASE(''||SRC_SCMA||''); IF a <= 0 THEN DBMS_OUTPUT.PUT('Invalid Source Schema Specified'); END IF; END
- Okay, aber das wäre ein Teil der Frage (oder einen anderen), zusammen mit dem tatsächlichen Fehler. Egal, ich bin nicht überzeugt von Ausgabe zu Ausgabe wie diese ist, was Sie wirklich wollen/brauchen. Für eine Sache, die Sie haben, um es umleiten, um ein Ausgabe-stream, die dann die Möglichkeit haben, zu Lesen, dass. Das ist okay, beim Debuggen, aber macht nicht viel Sinn, während des normalen Betriebs. Wenn Sie einen Fehler Bedingung, die Sie brauchen, um das auslösen von Ausnahmen. Und wie planen Sie, wie Sie den Aufruf dieser Prozedur? Was es nennt, was nennt das, etc?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Weil die built-in module dbms_output erlaubt das drucken auf der Konsole UND es kann verwendet werden, ohne die Kompatibilität der vector, Sie sollen in der Lage sein zu drucken der Nachrichten. Ich habe gerade getestet, ohne dass ein Verfahren für einen V10.5 Datenbank:
Ist es wichtig, dass serveroutput.
CREATE OR REPLACE PROCEDURE COPY_TABLE( IN SRC_SCMA VARCHAR(30), IN TGT_SCMA VARCHAR(30), IN SRC_TBL VARCHAR(50), IN TGT_TBL VARCHAR(50) ) LANGUAGE SQL CALLED ON NULL INPUT BEGIN DECLARE a INT; DECLARE d INT; SELECT COUNT(1) INTO a FROM SYSCAT.SCHEMATA WHERE SCHEMANAME = UCASE(''||SRC_SCMA||''); IF a <= 0 THEN DBMS_OUTPUT.PUT('Invalid Source Schema Specified'); END IF; END
ERROR [42601] [IBM][DB2/LINUXX8664] SQL0104N An unexpected token "<variable declaration>" was found following "". Expected tokens may include: "<SQL statement>".
CREATE OR REPLACE PROCEDURE COPY_TABLE1( IN SRC_SCMA VARCHAR(30), IN TGT_SCMA VARCHAR(30), IN SRC_TBL VARCHAR(50), IN TGT_TBL VARCHAR(50) ) LANGUAGE SQL CALLED ON NULL INPUT BEGIN DECLARE a INT; DECLARE d INT; SELECT COUNT(1) INTO a FROM SYSCAT.SCHEMATA WHERE SCHEMANAME = UCASE(''||SRC_SCMA||''); IF a <= 0 THEN CALL DBMS_OUTPUT.PUT_LINE('Invalid Source Schema Specified'); END IF; END@
Ich bin in der Lage zu erreichen, was ich soll mit Hilfe der unten aufgeführten Schritte:
HTML:
Wenn Sie die Konsole verwenden, die Nachrichten zu senden, müssen Sie warten, bis das Ende der Ausführung. Wenn Sie eine Meldung generieren, die in einem batch-Prozess, könnte es eine Weile dauern, bis die Meldung angezeigt.
Wenn Ihre Ausführung ist nur eine Anleitung und ein Fehler, Sie können 'erhöhen ein signal'. Auf diese Weise, kann die Fehlermeldung abgerufen werden konnte, aus jeder Anwendung, die Zugriff auf DB2.
Statt drucken die Ausgabe in der Konsole, die IMO keine sehr gute Praxis (nur Konsole ist in der Lage zu zeigen, die server-Ausgabe), schreiben Sie bitte eine Nachricht in ein log. Schreiben Sie die Ausgabe in einer anderen Tabelle, oder verwenden Sie einen Rahmen, wie log4db2.
Durch die Verwendung eines log-Mechanismus wie log4db2, wenn Sie ausführen, diese Aussage als Teil eines batch-Prozess, erhalten Sie die Nachricht nur durch Abfragen der log-Tabelle zu jeder Zeit, und Sie brauchen nicht zu warten auf das Ende der Ausführung.