PL/SQL Cursor
Red Baron
- datenbank
Hallo, kann man in PL/SQL Cursor bzw. eine Variable, die als Datentyp einer Tabelle definiert wurde auf NULL abfragen?
Danke und Gruß
Hallo,
kann man in PL/SQL Cursor bzw. eine Variable, die als Datentyp einer Tabelle definiert wurde auf NULL abfragen?
Werde doch etwas genauer, was Du damit meinst? Etwas Beispielcode von Deiner Prozedur vielleicht + Erklärung was Du machen willst? Normale Variablen fragst Du in PL/SQL einfach per IF ... IS NULL THEN ab - und in SELECT-Statements halt per WHERE ... IS NULL. Aber ich bin mir nicht sicher, ob Dir das jetzt hier an der Stelle konkret weiterhilft, dafür habe ich zu wenig Informationen.
Achja, beachte bitte, dass Oracle Leerstrings auch als NULL ansieht, obwohl das gegen ANSI SQL 92 verstößt (und so gut wie jede andere Datenbank das dagegen richtig macht).
Viele Grüße,
Christian
Hallo,
kann man in PL/SQL Cursor bzw. eine Variable, die als Datentyp einer Tabelle definiert wurde auf NULL abfragen?
Werde doch etwas genauer, was Du damit meinst? Etwas Beispielcode von Deiner Prozedur vielleicht + Erklärung was Du machen willst? Normale Variablen fragst Du in PL/SQL einfach per IF ... IS NULL THEN ab - und in SELECT-Statements halt per WHERE ... IS NULL. Aber ich bin mir nicht sicher, ob Dir das jetzt hier an der Stelle konkret weiterhilft, dafür habe ich zu wenig Informationen.
Achja, beachte bitte, dass Oracle Leerstrings auch als NULL ansieht, obwohl das gegen ANSI SQL 92 verstößt (und so gut wie jede andere Datenbank das dagegen richtig macht).
Viele Grüße,
Christian
Ich hole mit mit einem Cursor mehrere Datensätze aus einer Tabelle:
DECLARE
CURSOR cur IS
SELECT *
FROM test;
var test%ROWTYPE;
Es kann aber sein, dass in der Tabelle noch kein Datensatz vorhanden ist, deßhalb will ich den Cursor auf NULL abfragen:
BEGIN
IF cur IS NULL THEN...
Das geht aber nicht. Also habe ich mir gedacht, ich versuche den ersten Eintrag (den es aber nicht gibt!) aus dem Cursor zu lesen und dann die Variable 'test' auf NULL abzufragen. Das geht aber auch nicht.
yo,
Es kann aber sein, dass in der Tabelle noch kein Datensatz vorhanden ist, deßhalb will ich den Cursor auf NULL abfragen:
das kannst du auf verschiedene weise abfangen, zum einen über die cursor-attribute wie zum beispiel %FOUND, bzw. %NOTFOUND, wenn du die Cursor öffnest und versuchst einen datensatz abzurufen. je nachdem ob der fetch erfolgreich war doer nicht, setzt er die beiden genannten attribute des cursors. oder aber du durschläufst den cursor mit einer Cursor-For-schleife, dann geht er erst gar nicht rein in die schleife, wenn es keinen datensatz gibt.
Ilja
OK, es hat funktioniert. Danke.
Hallo,
Ich hole mit mit einem Cursor mehrere Datensätze aus einer Tabelle:
DECLARECURSOR cur IS
SELECT *
FROM test;
var test%ROWTYPE;Es kann aber sein, dass in der Tabelle noch kein Datensatz vorhanden ist, deßhalb will ich den Cursor auf NULL abfragen:
BEGIN
IF cur IS NULL THEN...Das geht aber nicht. Also habe ich mir gedacht, ich versuche den ersten Eintrag (den es aber nicht gibt!) aus dem Cursor zu lesen und dann die Variable 'test' auf NULL abzufragen. Das geht aber auch nicht.
Zuerst einmal müsstest Du 'var' auf NULL abfragen, nicht 'test' (da var test%ROWTYPE die Variable 'var' definiert vom Typ "Zeile aus Tabelle 'test'"). Zum anderen gibt's dafür explizit eine Syntax:
OPEN cur;
FETCH c1 INTO var;
IF c1%NOTFOUND THEN
-- tu was --
END IF
CLOSE cur;
Schau Dir dazu am besten die Doku an: http://download.oracle.com/docs/cd/B10501_01/appdev.920/a96624/06_ora.htm#36656
Viele Grüße,
Christian