Frage
Ich habe diese Art von Funktionalität verwendet, bevor aber MSSQL ist aber kann es nicht für Oracle zu arbeiten, irgendwelche Tipps?
DECLARE
MY_TBL NUMBER := 1;
BEGIN
IF(MY_TBL > 0) THEN
SELECT * FROM MY_TBL ORDER BY MY_TBL_ID DESC;
END IF;
END;
Was würde Ich mag ein Flag-Variable auf Null oder Eins gesetzt haben, wenn man die Ergebnisse angezeigt werden, wenn Nullsprung. Dies ist nur ein einfaches Skript, alle meine Tabellen haben und select-Anweisungen in einem ans Flag Skript die, die ich brauche, um die Ergebnisse zu sehen. Also, wenn ich 5 Tische haben würde ich die ELSIF Funktion eher wie diese hinzufügen
DECLARE
MY_TBL1 NUMBER := 1;
MY_TBL2 NUMBER := 1;
BEGIN
IF(MY_TBL1 > 0) THEN
SELECT * FROM MY_TBL1 ORDER BY MY_TBL1_ID DESC;
ELSIF(MY_TBL2 > 0) THEN
SELECT * FROM MY_TBL2 ORDER BY MY_TBL2_ID DESC;
END IF;
END;
und so weiter. Vielen Dank für jede Hilfe zu diesem Thema, --Phill
EDIT:
Hier ist, was ich habe:
VAR result_set REFCURSOR
DECLARE
my_tbl_1 NUMBER := 1;
my_tbl_2 NUMBER := 0;
my_tbl_3 NUMBER := 0;
BEGIN
IF (my_tbl_1 > 0)
THEN
BEGIN
OPEN :result_set FOR
SELECT *
FROM my_tbl_1
ORDER BY my_tbl_1_id DESC;
END;
ELSIF (my_tbl_2 > 0)
THEN
BEGIN
OPEN :result_set FOR
SELECT *
FROM my_tbl_2
ORDER BY my_tbl_2_id DESC;
END;
ELSIF (my_tbl_3 > 0)
THEN
BEGIN
OPEN :result_set FOR
SELECT *
FROM my_tbl_3
ORDER BY my_tbl_3_id DESC;
END;
END IF;
END;
PRINT result_set
Lösung
Oracle
kann nicht Resultsets aus einer gespeicherten Prozedur zurück, wie SQL Server
der Fall ist.
Deklarieren cliend Seite Cursor-Variablen und zurück zu ihnen:
Um einen Cursor in SQL*Plus
anzuzeigen:
VAR cur1 REFCURSOR
DECLARE
MY_TBL1 NUMBER := 1;
MY_TBL2 NUMBER := 1;
BEGIN
IF(MY_TBL1 > 0) THEN
BEGIN
OPEN :cur1
FOR
SELECT *
FROM MY_TBL1
ORDER BY
MY_TBL1_ID DESC;
END;
ELSIF (MY_TBL2 > 0) THEN
BEGIN
OPEN :cur1
FOR
SELECT *
FROM MY_TBL2
ORDER BY
MY_TBL2_ID DESC;
END;
END IF;
END;
/
PRINT cur