2016-05-31 6 views
0

IREGEXP_LIKE nicht variables Muster zu akzeptieren

> create table employee(employeeid number(10), name varchar2(100),deptno 
> 
>  number(10)); 

gibt es 1000 Zeilen in dieser Tabelle eine Tabelle. wenn ich versuche, eine Prozedur zu erstellen, die einen Wert sucht und eine temporäre Tabelle zur Laufzeit erstellt & fügt alle Ergebnisse in diese Tabelle ein. In der Prozedur: tableName ist der Name der temporären Tabelle, die von der Anwendung übergeben wird. Suchfeld ist der Spaltenname, nach dem gesucht wird. Searchvalue wird das Muster sein.

exec exec quick_search ('temp1','name','barbara') ;

gibt es kein Objekt, das mit dem Namen temp1 und barbara existiert in meinen Mitarbeitern Tabelle exixt:

create or replace PROCEDURE quick_search (tableName IN varchar2,searchfield IN 
VARCHAR2,searchvalue IN varchar2) IS 
v_tableName varchar2(100); 
begin 
select count(tname) into v_tableName from tab where lower(tname) = tableName; 
if v_tableName = 1 then 
EXECUTE IMMEDIATE 'DROP TABLE '||tableName||''; 
case searchfield 
when 'name' then 
        execute immediate 'create table '||create_table||' as 
          Select Distinct employeeid FROM employee where 
regexp_like(NAME ,'||searchvalue||',''i'')'; 


when 'deptno' then 
        execute immediate 'create table '||create_table||' as 
          Select Distinct employeeid FROM employee where 
regexp_like(deptno ,'||searchvalue||',''i'')'; 

end case; 
end if; 
if v_tableName =0 then 
case searchfield 
when 'name' then 
        execute immediate 'create table '||create_table||' as 
          Select Distinct employeeid FROM employee where 
regexp_like(NAME ,'||searchvalue||',''i'')'; 


when 'deptno' then 
        execute immediate 'create table '||create_table||' as 
          Select Distinct employeeid FROM employee where 
regexp_like(deptno ,'||searchvalue||',''i'')'; 

end case; 
end if; 
end; 

wenn ich dies ausgeführt wird.

ich Fehler Fehlermeldung immer bin - ORA-00904: "BARBARA": ungültige Kennung ORA-06512: bei "SCOTT.QUICK_SEARCH", Zeile 53 ORA-06512: in Zeile 1 00904. 00000 - "% s: Ungültige Kennung" * Ursache: * Aktion:

Antwort

0

Sie haben die doppelten Anführungszeichen auf den Parameter "case-insensitive" gesetzt, aber vergessen, es auch auf den Musterparameter zu setzen. Sie müssten jedes Execute-Verfahren sofort wie folgt ändern:

EXECUTE IMMEDIATE 'CREATE TABLE '||create_table||' AS SELECT DISTINCT employeeid FROM employee WHERE REGEXP_LIKE(name, ''' || searchvalue || ''',''i'')'; 
Verwandte Themen