首页 文章

regexp_like不接受变量模式

提问于
浏览
0

我有一张 table

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

此表中有1000行 . 当我试图创建一个过程,它将搜索一个值并在运行时创建一个临时表并在该表中插入所有结果 . 在过程中:tableName是将由应用程序传递的临时表的名称 . 搜索字段是将在其上进行搜索的列名称 . 搜索值将是模式 .

创建或替换PROCEDURE quick_search(tableName IN varchar2,searchfield IN
VARCHAR2,searchvalue IN varchar2)IS
v_tableName varchar2(100);
开始
从tab中选择count(tname)到v_tableName,其中lower(tname)= tableName;
如果v_tableName = 1那么
EXECUTE IMMEDIATE'DROP TABLE'|| tableName ||'';
案例搜索字段
当'名字'然后
立即执行'create table'|| create_table ||'如
选择Distinct employeeid FROM employee where
regexp_like(NAME,'|| searchvalue ||',''i'')';

当'deptno'然后
立即执行'create table'|| create_table ||'如
选择Distinct employeeid FROM employee where
regexp_like(deptno,'|| searchvalue ||',''我'')';

结束案例;
万一;
如果v_tableName = 0则
案例搜索字段
当'名字'然后
立即执行'create table'|| create_table ||'如
选择Distinct employeeid FROM employee where
regexp_like(NAME,'|| searchvalue ||',''i'')';

当'deptno'然后
立即执行'create table'|| create_table ||'如
选择Distinct employeeid FROM employee where
regexp_like(deptno,'|| searchvalue ||',''我'')';

结束案例;
万一;
结束;

当我执行这个:

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

在我的员工表中没有名称为temp1和barbara的对象 .

我收到错误错误报告 - ORA-00904:“BARBARA”:无效标识符ORA-06512:在“SCOTT.QUICK_SEARCH”,第53行ORA-06512:第1行00904. 00000 - “%s:无效标识符”*原因:*行动:

1 回答

  • 0

    您将双引号放在不区分大小写的参数上,但忘记将它放在模式参数上 . 您必须按如下方式修改程序的每个执行立即:

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

相关问题