Ihre Vergleichsstring nur 16 Zeichen lang, ABC und 13 Unterstrichen ist. Sie benötigen 16 Unterstriche, um ABC gemäß Ihrer Spezifikation zu folgen.
BEARBEITEN: Wie HepC Notizen unten, auch nach dem Festlegen der Anzahl der Unterstriche, können Sie immer noch falsche Antworten erhalten. Dies liegt daran, dass der Unterstrich für ein beliebiges Zeichen steht, nicht nur für Alpha oder Numerisch.
Versuchen Sie stattdessen:
... if regexp_like(chk_var, '^ABC[[:alnum:]]{16}$') then...
Dies als TRUE ausgewertet, wenn und nur wenn chk_var Spiele
- vom Anfang der Zeichenfolge (die^Marker)
- die Buchstaben A, B , C in der Reihenfolge
- jedes alphabetische oder numerische Zeichen (das äußere [...] bedeutet jedes einzelne Zeichen in der Liste innerhalb von [...]; darin ist [: alnum:] eine Abkürzung für jedes Alpha oder numerisches Zeichen)
- genau 16 Vorkommen "eines einzelnen Alnum - Zeichens" (die 16 Zeichen können sich voneinander unterscheiden) (der Marker {16})
- und das Ende des Strings gleich danach (der $ marker)).
Beispiel SQL * Plus-Sitzung (Screenshot):
SQL> set serveroutput on
SQL> define mch_id = 'ABC1234567812345678'
SQL> declare
2 chk_var varchar2(200) := '&mch_id';
3 begin
4 if regexp_like(chk_var, '^ABC[[:alnum:]]{16}$') then
5 dbms_output.put_line('correct');
6 else
7 dbms_output.put_line('incorrect');
8 end if;
9 end;
10/
old 2: chk_var varchar2(200) := '&mch_id';
new 2: chk_var varchar2(200) := 'ABC1234567812345678';
correct
PL/SQL procedure successfully completed.
SQL> define mch_id = 'ABC123456781234%%%%'
SQL>/
old 2: chk_var varchar2(200) := '&mch_id';
new 2: chk_var varchar2(200) := 'ABC123456781234%%%%';
incorrect
PL/SQL procedure successfully completed.
Der Code zu schreiben, entweder ‚richtig‘ oder ‚falsch‘ scheint - wie die erwartete Ausgabe entweder der Strings können Sie unten die zeigen, Code? Bitte klären Sie, was Sie meinen. – mathguy