Aus einer gespeicherten Oracle-Prozedur heraus ist es möglich, ein Unterprogramm innerhalb einer SQL-Anweisung aufzurufen? Vielleicht wäre ein Beispiel ein besserer Weg, es zu erklären. Hier ein einfaches Beispiel:Aufrufen eines PLSQL-Unterprogramms innerhalb von SQL
DECLARE
PROCEDURE p_test(in_text VARCHAR2) IS
BEGIN
dbms_output.put_line(in_text);
END;
BEGIN
SELECT p_test('Test') FROM dual;
END;
/
Dies führt jedoch zu einem ORA-00904-Fehler. Also, ich bin nicht sicher, die Antwort auf meine Frage wird ja sein. Trotzdem wollte ich noch fragen.
Was mein wirkliches Programm zu tun versucht, ist über hundert Paar Felder zu vergleichen. So etwas wie folgt aus:
DECLARE
PROCEDURE p_compare
(in_old VARCHAR2, in_new VARCHAR2) IS
BEGIN
IF in_old <> in_new THEN
dbms_output.put_line('Mismatch');
INSERT INTO tbl_mismatch VALUES (in_old, in_new);
END IF;
END;
v_old_value_a VARCHAR2(30);
v_new_value_a VARCHAR2(30);
v_old_value_b VARCHAR2(30);
v_new_value_b VARCHAR2(30);
BEGIN
--What I would like to do
SELECT p_compare(old_value_a, new_value_a), p_compare(old_value_b, new_value_b)
FROM (SELECT 'ALPHA' old_value_a, 'ALPHA' new_value_a, 'BETA' old_value_b, 'DELTA' new_value_b FROM dual);
--What I am currently doing
--I have over 100 pairs of fields that I am comparing
--Declaring two variables for each pair becomes cumbersome
SELECT old_value_a, new_value_a, old_value_b, new_value_b
INTO v_old_value_a, v_new_value_a, v_old_value_b, v_new_value_b
FROM (SELECT 'ALPHA' old_value_a, 'ALPHA' new_value_a, 'BETA' old_value_b, 'DELTA' new_value_b FROM dual);
p_compare(v_old_value_a, v_new_value_a);
p_compare(v_old_value_b, v_new_value_b);
END;
/
Also, wenn vielleicht das, was ich versuche, nicht möglich ist, gibt es einen besseren Weg, um mein End-Ziel zu erreichen?
Sie eine Funktion aufrufen können, die Art und Weise, kein procedure.What Sie erwarten Sie SELECT p_test (‘ Test ') VON Dual'? – Aleksej
Aleksej, für die Zwecke des Beispiels würde ich erwarten, dass SELECT p_test ('Test') FROM dual 'dasselbe zurückgibt wie' p_test ('Test') '. Im eigentlichen Code führt das Unterprogramm den Vergleich und einige zusätzliche Operationen durch und fügt die abweichenden Werte in eine Tabelle ein. – sukach
Wenn p_test eine Prozedur ist, gibt es überhaupt nichts zurück; Wenn Sie ein Ergebnis erhalten möchten, müssen Sie eine Funktion erstellen, die einen Wert zurückgibt. – Aleksej