Dynamic 动态SQL:如何处理select语句中的单引号
基本上,我想从数据库中搜索一名员工,使用他/她的职位和位置。我使用动态sql(dbms_sql.v7)编写了一个函数名searchemp 表结构 Emp表: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
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
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中加单引号)