Von der Suche ich getan habe, es scheint, kann man nicht erklären und Aussagen in Select Variablen wie folgt festgelegt. Ist das richtig oder fehlt mir etwas?
Innerhalb von Oracle PL/SQL und SQL sind zwei separate Sprachen mit zwei separaten Engines. Sie können SQL-DML in PL/SQL einbetten, und dadurch erhalten Sie Variablen. Wie der folgende anonyme PL/SQL-Block. Beachten Sie, dass die /
am Ende nicht Teil von PL/SQL ist, sondern SQL * Plus anweist, den vorhergehenden Block zu senden.
declare
v_Date1 date := to_date('03-AUG-2010', 'DD-Mon-YYYY');
v_Count number;
begin
select count(*) into v_Count
from Usage
where UseTime > v_Date1;
dbms_output.put_line(v_Count);
end;
/
Das Problem besteht darin, dass ein Block, der zu Ihrem T-SQL-Code entspricht nicht funktionieren:
SQL> declare
2 v_Date1 date := to_date('03-AUG-2010', 'DD-Mon-YYYY');
3 begin
4 select VisualId
5 from Usage
6 where UseTime > v_Date1;
7 end;
8/
select VisualId
*
ERROR at line 4:
ORA-06550: line 4, column 5:
PLS-00428: an INTO clause is expected in this SELECT statement
Um die Ergebnisse einer Abfrage aus einem PL/SQL-Pass, entweder anonym Block, gespeicherte Prozedur oder gespeicherte Funktion, muss ein Cursor deklariert, geöffnet und dann an das aufrufende Programm zurückgegeben werden. (Über den Rahmen der Beantwortung dieser Frage EDIT:. siehe Get resultset from oracle stored procedure)
Der Client-Tool, das mit der Datenbank verbindet haben kann seine eigene Bind-Variablen. In SQL * Plus:
SQL> -- SQL*Plus does not all date type in this context
SQL> -- So using varchar2 to hold text
SQL> variable v_Date1 varchar2(20)
SQL>
SQL> -- use PL/SQL to set the value of the bind variable
SQL> exec :v_Date1 := '02-Aug-2010';
PL/SQL procedure successfully completed.
SQL> -- Converting to a date, since the variable is not yet a date.
SQL> -- Note the use of colon, this tells SQL*Plus that v_Date1
SQL> -- is a bind variable.
SQL> select VisualId
2 from Usage
3 where UseTime > to_char(:v_Date1, 'DD-Mon-YYYY');
no rows selected
Beachten Sie die oben in SQL Plus kann nicht (wahrscheinlich nicht) arbeiten in Toad PL/SQL-Entwickler, usw. Die Linien mit variabler und exec sind Start-SQL plus Befehle. Sie sind keine SQL- oder PL/SQL-Befehle. Keine Zeilen ausgewählt, da die Tabelle leer ist.
+1: Das ist keine Antwort, das ist eine * Dissertation *! –
+1 einverstanden mit @OMG Ponys :) – ThinkJet
+1 ebenfalls TJ! –