2009-05-01 12 views
2

Ich habe einen If-Anweisungsblock ähnlich dem folgenden, der mit dem Fehler fehlschlägt - PLS-00103: Das Symbol "SELECT" wurde erkannt, wenn eines der folgenden ...skalare Unterabfrage in if-Anweisung Bedingung in PL/SQL

.
Begin 
    If (select count(*) from Table1) > 0 then 
     dbms_output.put_line('Test'); 
    end if; 
end; 

ich habe ähnliche Case-Anweisung, die

select 
case 
    when (select count(*) from Table1) > 0 
     then 2 
    else 
     1 
end 
from dual 

Von gut funktioniert, was ich in Oracle-Dokumentation gelesen haben, die, ob und wann Unterstützung ein BoolAusdruck, irgendwelche Ideen, ob Subqueries in If Bedingungen unterstützt werden.

Hinweis: Die Aussagen wurden vereinfacht, ich bin nicht wirklich die Zählung der gesamten Tabelle in Gang zu bringen, so dass keine Optimierungsvorschläge bitte

Antwort

5

Nein, Sie können nicht eine SELECT in der Art und Weise Sie wollen.

In Ihrem Beispiel mit CASE verwenden Sie keine CASE "Anweisung" - Sie verwenden einen CASE Ausdruck, der zufällig in eine SQL-Anweisung eingebettet ist. Sie können in diesem Fall eine Unterabfrage verwenden, da sie sich im Kontext einer SQL-Anweisung und nicht in einer prozeduralen Anweisung befindet. Sie könnten eine Unterabfrage in einer Prozedur-CASE-Anweisung nicht verwenden.

+0

Ich sah die Syntax für IF und CASE unter http up: // download.oracle.com/docs/cd/B19306_01/appdev.102/b14261/if_statement.htm#sthref2791 und http://download.oracle.com/docs/cd/B19306_01/appdev.102/b14261/case_statement.htm# sthref2511, beide hatten einen booleschen Ausdruck für die Bedingung, die verwendet werden muss. –

+0

Ja, das stimmt. Ich sage, der Unterschied liegt nicht zwischen IF und CASE, es ist zwischen CASE als prozedurale Anweisung und CASE als Ausdruck in einer SQL-Anweisung. –

+0

Dave, ich habe dich, ich habe die CASE Unterschiede in SQL und PL/SQL vergessen. Also denke ich, dass die Verwendung von CASE in PL/SQL auf die gleiche Weise fehlschlagen sollte. –

0

Haben Sie DBMS_OUTPUT.ENABLE

Schnell Beispiel

genannt
+0

Ich denke, ich war nicht klar, was versagt, herausgegeben ich die Frage, die Informationen zu bringen. Ich hatte einen PL/SQL-Fehler geworfen, es gibt kein Problem mit dbms_output. –

+0

PLS-00103-Fehler beziehen sich normalerweise auf Syntaxfehler. ? Wenn Sie einen ausgewählten ‚Test‘ in die if-Anweisung setzen funktioniert das Cant auf eine Oracle-Box heute bekommen, um es selbst zu testen (nur Sqlserver auf meinem Laptop) – u07ch

0

Ich glaube nicht, dass Unterabfragen in IF-Bedingungen unterstützt werden ... PL/SQL erwartet, dass SELECT eine Reihe von Datensätzen, nicht einen einzelnen Wert in einem Ausdruck/statemen verwendet t.