Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Dynamic 动态SQL:如何处理select语句中的单引号_Dynamic_Plsql - Fatal编程技术网

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

Dynamic 动态SQL:如何处理select语句中的单引号,dynamic,plsql,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

基本上,我想从数据库中搜索一名员工,使用他/她的职位和位置。我使用动态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);
  • 之所以使用大写,是因为这两个表中的所有内容都是大写的
  • 函数名的调用方式如下

    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附近没有单独的报价,因此在数据库中找不到任何员工。如果参数为number(即empno),则该函数可以正常工作

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

我使用管道| |,因为变量e_job和e_loc周围有单引号(我忘了在上面的select stm中加单引号)