regexp_like 不接受变量模式
regexp_like not accepting variable pattern
我有一个table
> create table employee(employeeid number(10), name varchar2(100),deptno
>
> number(10));
此 table 中有 1000 行。
当我试图创建一个过程时,它将搜索一个值并在 运行 时间创建一个临时 table 并将所有结果插入该 table。
在过程中: tableName 是临时 table 的名称,将由应用程序传递。
搜索字段是将在其上进行搜索的列名。
搜索值将是模式。
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;
当我执行此操作时:
exec exec quick_search ('temp1','name','barbara') ;
我的员工中不存在名为 temp1 和 barbara 的对象 table。
我遇到错误
错误报告 -
ORA-00904: "BARBARA": 标识符无效
ORA-06512: 在 "SCOTT.QUICK_SEARCH",第 53 行
ORA-06512: 在第 1 行
00904. 00000 - “%s:无效标识符”
*原因:
*行动:
您将双引号放在不区分大小写的参数上,但忘记也将它放在模式参数上。您必须按如下方式修改过程的每个立即执行:
EXECUTE IMMEDIATE 'CREATE TABLE '||create_table||' AS SELECT DISTINCT employeeid FROM employee WHERE REGEXP_LIKE(name, ''' || searchvalue || ''',''i'')';
我有一个table
> create table employee(employeeid number(10), name varchar2(100),deptno
>
> number(10));
此 table 中有 1000 行。 当我试图创建一个过程时,它将搜索一个值并在 运行 时间创建一个临时 table 并将所有结果插入该 table。 在过程中: tableName 是临时 table 的名称,将由应用程序传递。 搜索字段是将在其上进行搜索的列名。 搜索值将是模式。
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;
当我执行此操作时:
exec exec quick_search ('temp1','name','barbara') ;
我的员工中不存在名为 temp1 和 barbara 的对象 table。
我遇到错误 错误报告 - ORA-00904: "BARBARA": 标识符无效 ORA-06512: 在 "SCOTT.QUICK_SEARCH",第 53 行 ORA-06512: 在第 1 行 00904. 00000 - “%s:无效标识符” *原因: *行动:
您将双引号放在不区分大小写的参数上,但忘记也将它放在模式参数上。您必须按如下方式修改过程的每个立即执行:
EXECUTE IMMEDIATE 'CREATE TABLE '||create_table||' AS SELECT DISTINCT employeeid FROM employee WHERE REGEXP_LIKE(name, ''' || searchvalue || ''',''i'')';