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

时间:2015-05-10 00:10:19

标签: dynamic plsql

基本上我想使用他/她的职位和职位从数据库中搜索一名员工。我使用动态sql(dbms_sql.v7)编写函数名称searchemp。

表格结构

Emp表:

Empno number
Ename varchar
Job   varchar
Deptno number

部门表

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);
  • 使用UPPER是因为这两个表中的所有内容都是大写的。
  • 函数名称就像这样调用

    SQL> execute searchemp('&job', '&loc');
    Enter value for job: clerk
    Enter value for loc: dallas
    

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

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

我有CLERK和DALLAS的错误无效标识符。此外,CLERK和DALLAS没有单引号,因此它无法在数据库中找到任何员工。如果参数是数字(即.empno),函数可以正常工作。

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

1 个答案:

答案 0 :(得分:0)

在这里做了一些猜测,因为它非常奇怪,它没有拿起单引号。:

首先,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) || ';

如果您使用如下所示的类似语句,是否会发生同样的错误?

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) %';