动态 SQL:如何处理 select 语句中的单引号

Dynamic SQL: how to handle single quote in select statement

基本上我想使用 his/her 职位和位置从数据库中搜索员工。我使用动态 sql (dbms_sql.v7).

写了一个函数名 searchemp

Table结构

Emp table:

Empno number
Ename varchar
Job   varchar
Deptno number

部门table

DEPTNO number
DNAME  varchar        
LOC    varchar

所以我的 select 声明如下所示:

  select_stm:= 'SELECT * FROM emp FULL OUTER JOIN dept ON emp.deptno =   dept.deptno where job = ' || UPPER(e_job) || ' and loc = ' || UPPER(e_loc);

当我在屏幕上显示sql语句时:

   SELECT * FROM emp FULL OUTER JOIN dept ON emp.deptno = dept.deptno where job = CLERK and loc = DALLAS;

我有 CLERK 和 DALLAS 的错误标识符无效。此外,CLERK 和 DALLAS 周围没有单引号,因此如果参数为数字 (i.e.empno).

,则在 database.The 函数中找不到任何员工工作正常

sql 语句很好,因为我在 SQL*Plus 中对其进行了测试。 我如何处理单引号以使其显示我想要的内容?

这里有一些猜测,因为它没有选择单引号很奇怪。:

首先,SQL 最后缺少一个单引号。您使用管道的任何原因 ||?

select_stm:= 'SELECT * FROM emp FULL OUTER JOIN dept ON emp.deptno =   dept.deptno where job = ' || UPPER(e_job) || ' and loc = ' || UPPER(e_loc) || ';

如果您使用如下 like 语句,是否会出现同样的错误?

select_stm:= 'SELECT * FROM emp FULL OUTER JOIN dept ON emp.deptno =   dept.deptno where job like '% || UPPER(e_job) || %' and loc and '% || UPPER(e_loc) %';