2017-11-01 8 views
0

Ich habe einen Alias ​​definiert:Oracle SQL Alias ​​Verwendung

concat(lower(DBO.tname.fname),lower(dbo.tname.lname)) as TNAME, 

und später wollen auf TNAME in einem regulären Ausdruck verwenden:

REGEXP_LIKE (TNAME,'smith') 

Dieser schlägt mit dem Fehler:

ORA-00904: "TNAME": invalid indentifier 

aber wenn ich TNAME mit dem ursprünglichen Ausdruck ersetzen, ist alles in Ordnung:

REGEXP_LIKE (concat(lower(DBO.tname.fname),lower(dbo.tname.lname)),'smith') 

Wie sonst, kann ich einen komplexen Ausdruck ersetzen, wenn nicht mit einem Alias?

Vielen Dank, für die Hilfe.

+1

Verwenden Sie eine Unterabfrage oder CTE. –

+0

Sofern Sie nicht in der äußeren Abfrage darauf verweisen, wird es nicht erkannt. – Eric

Antwort

0

Die Reihenfolge der Operation ist FROM, WHERE, SELECT, ORDER BY Sie legen Ihren Alias ​​in SELECT. Wenn Sie Ihren Vergleich REGEXP_LIKE (TNAME,'smith') in WHERE-Klausel, wird es nicht erkennen.

SELECT TNAME 
FROM (
    SELECT concat(lower(DBO.tname.fname),lower(dbo.tname.lname)) as TNAME, some_other_cols 
    FROM some_table 
)