Funktion zum überprüfen von Benutzername und Kennwort in pl/sql
Ich bin neu in pl/sql und habe ein Hausaufgaben problem, dass ich habe, ganz fest auf.
Ich habe eine Tabelle namens BANKCUSTOMER mit den folgenden Spalten:
USERNAME NOT NULL VARCHAR2(11)
FAMILY_NAME NOT NULL VARCHAR2(25)
NAME NOT NULL VARCHAR2(25)
PASSWD NOT NULL VARCHAR2(6)
Möchte ich eine Funktion, die prüft in der Datenbank, wenn die Benutzer BENUTZERNAMEN und das PASSWORT entspricht den Daten in der Datenbank. Wenn die Anmeldung erfolgreich ist, dann sollte es ausdrucken "Login erfolgreich!" sonst "Falscher Benutzername oder Passwort!"
Besuchte ich einen pl/sql tutorial-Seite und kam über den folgenden code die ich ein bisschen modifiziert, so kann es funktionieren mit meiner Datenbank, aber es ist etwas, was ich nicht verstehe, und das ist das, was z number
tut und was begin select 1 into z
tut. Könnte mir bitte jemand erklären für mich.
create or replace function log_in(x in varchar2, y in varchar2)
return varchar2
as
z number;
begin
select 1
into z
from bankcustomer
where username=x
and passwd=y;
dbms_output.put_line('Login successful!');
exception
when no_data_found then
dbms_output.put_line('Wrong username or password!');
end;
Ich würde gerne testen Sie die Funktion durch schreiben SELECT log_in() FROM dual;
um zu sehen, ob es funktioniert. Wenn ich Schreibe SELECT log_in() FROM dual;
bekomme ich eine Fehlermeldung, die besagt:
Fehler, beginnend bei Zeile 1 in Befehl:
WÄHLEN Sie log_in() VON dual
Fehler bei der Kommando-Zeile:1 Spalte:7
Fehlermeldung:
SQL-Fehler: ORA-06553: PLS-306: falsche Anzahl oder Typen der Argumente im Aufruf von 'LOG_IN'
06553. 00000 - "PLS-%s: %s"
*Ursache:
*Aktion:
Wie kann ich dieses Problem lösen Hausaufgaben problem?
Sorry für meine newbie-Fragen (hoffe, dass ich lernen kann, damit kann ich anderen helfen, in der Zukunft).
Vielen Dank im Voraus!
Du musst angemeldet sein, um einen Kommentar abzugeben.
Haben Sie definiert eine Funktion, aber nicht einen Wert zurückgeben von ihm. Angesichts der Tatsache, dass Sie mit "auswählen" die Funktion gibt es keine Notwendigkeit zu verwenden dbms_output:
Zusätzlich der Aufruf der Funktion nicht die Parameter username und password, das ist, warum Sie die Fehlermeldung erhalten. Vorausgesetzt, Sie haben sich die Funktion, um tatsächlich etwas von dem zurückgeben, müssen Sie
Haben Sie tatsächlich bestanden die Argumente der
log_in
Funktion? Und was istlogga_in()
? Ist letzteres ein Schreibfehler auf Ihrer Seite?Sowieso, die
select 1 into z
erzwingt nur eine Ausnahme, wenn keine übereinstimmung gefunden wird. Nichts mehr.In anderen Worten, könnten Sie schreiben Sie den code, ohne dass es, zum Beispiel mit
select count(*) into authenticated ...
und dann könnte man schauenif authenticated != 0
und die entsprechenden Maßnahmen. Ich glaube nicht, haben eine Oracle-Instanz, damit dieser code geschrieben ist blind, Sie brauchen, um es zu testen:SELECT log_in('Posidon', 'FooBarPassword') from dual
.select count(*) into authenticated
und der checkif authenticated !=0
. Was soll ich Winden stattas z number
ich Danke Ihnen sehr für Ihre Hilfe!Nur, um weitere Informationen hinzuzufügen, was bereits zur Verfügung gestellt wurden, die
BEGIN
- Schlüsselwort kennzeichnet den Beginn der Ausführung block; was oben ist der header-Funktion und Erklärung Erklärungen.Die Aussage z-Reihe; ist eine Variablen-deklarations-Anweisung deklarieren Sie eine variable namens " z " und ist von dem Datentyp Zahl. Die
SELECT 1 INTO z WHERE...
- Anweisung ist die überprüfung derBANKCUSTOMER
Tabelle eine Zeile, in welcher der Benutzername entspricht, was an die Funktion übergeben Sie im ersten parameter, und ein Passwort, die dem entspricht, was übergeben wird an die Funktion im zweiten parameter.Wenn es eine Zeile, wo der Benutzername und das Kennwort übereinstimmen, was an die Funktion übergeben, dann wird die variable z enthalten die Nummer 1. Wenn es nicht ist, die
Oracle NO_ROWS_FOUND exception
angehoben werden, weilSELECT...INTO
Anweisungen müssen immer wählen Sie eine und nur eine Zeile, oder Sie wirft eine Ausnahme (dieNO_ROWS_FOUND exception
für keine Zeilen, und dieTOO_MANY_ROWS exception
für mehr als eine Zeile).Hoffe, das ist hilfreich!!! Zögern Sie nicht zu Fragen wenn Sie weitere Fragen haben.