动态 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);
使用 - UPPER 是因为这两个 table 中的所有内容都是大写的。
函数名是这样调用的
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 周围没有单引号,因此如果参数为数字 (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) %';
基本上我想使用 his/her 职位和位置从数据库中搜索员工。我使用动态 sql (dbms_sql.v7).
写了一个函数名 searchempTable结构
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);
-
使用
- UPPER 是因为这两个 table 中的所有内容都是大写的。
函数名是这样调用的
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 周围没有单引号,因此如果参数为数字 (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) %';