2016-08-08 61 views
-2

Ich war mit SQL Server vor, und jetzt muss ich eine Aufgabe in PL/SQL zu tun, und es scheint mir, dass Oracle völlig unlogisch ist, und ich konnte nicht finden überall richtige, benutzerfreundliche Dokumentation.Wie verwendet man PL/SQL gespeicherte Prozedur mit Variable

Wie eine gespeicherte Prozedur ähnlich wie dieser in SQL Server schreiben:

create procedure test(
@x int 
) 
as 
begin 
select * from table where id = @x 
end 

Und wenn posiible erklärt nur Logik hinter dem PL/SQL-Skript. Vielen Dank.

+1

Sie können aus der [Dokumentation] starten (http://docs.oracle.com/database/121/LNPLS/procedure.htm#LNPLS01336) – Aleksej

+0

http://www.akadia.com/services/ ora_return_result_set.html – Mottor

+0

Wenn Sie verstehen, dass Sie neu bei Oracle sind, ist die Frage immer noch zu vage. SO ist keine "How-To" -Site. Wie vorgeschlagen, sollten Sie mit der Dokumentation beginnen. @ JDro04 hat bereits eine sehr einfache Vorlage des gespeicherten Oracle-Prozedurmodells bereitgestellt. – Beege

Antwort

1
CREATE OR REPLACE PROCEDURE test (x NUMBER) AS 
var_table_row TABLE%ROWTYPE; 
BEGIN 
select * 
into var_table_row 
from table where id = x; 
END; 

Sie müssen eine Reihe Variable deklarieren, zu speichern, was Sie wählen. Dieses Verfahren macht momentan keinen Sinn. Versuchen Sie, einen Cursor oder etwas zurückzugeben?

Edit: Ich würde eine Funktion wie diese verwenden, um zu tun, was Sie fragen.

CREATE OR REPLACE FUNCTION test (x NUMBER) RETURN TABLE%ROWTYPE AS 
var_table_row TABLE%ROWTYPE; 
BEGIN 
select * 
into var_table_row 
from table where id = x; 
RETURN var_table_row; 
END; 

Rufen Sie die Funktion so auf.

Declare 
var_row TABLE%ROWTYPE; 
BEGIN 
var_row := test(2); --passes two, returns a row. Use row like var_row.id 
END; 
+0

Nein. Es gibt eine einfache Tabelle mit ID-Spalte. Ich möchte nur ID an SP übergeben, so dass die Zeile – Sher

+0

Ich habe meinen Beitrag bearbeitet, um mit, was ich denke, Ihr Anwendungsfall wäre – JDro04

+0

nach Aufruf der Funktion, gibt es nur PL/SQL-Prozedur erfolgreich abgeschlossen. und keine Ergebnismenge, obwohl es einen Eintrag für eine solche ID gibt. Was kann der Grund sein? – Sher

0

Ihre Proc mit PL \ SQL wie etwas aussehen würde ...

create procedure test(x IN NUMBER) 
IS 
begin 
    select * from table where id = x; 
end; 
+0

Das gibt Fehler zurück: Fehler (4,4): PL/SQL: SQL-Anweisung ignoriert, Fehler (4,57): PL/SQL: ORA-00933: SQL-Befehl nicht ordnungsgemäß beendet, Fehler (5,3): PLS- 00103: Das Symbol "Dateiende" wurde festgestellt, wenn eines der folgenden Ereignisse erwartet wird:; – Sher