基本上我想使用他/她的职位和职位从数据库中搜索一名员工。我使用动态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没有单引号,因此它无法在数据库中找到任何员工。如果参数是数字(即.empno),函数可以正常工作。
sql语句很好,因为我在SQL * Plus中测试它。 如何处理单引号以显示我想要的内容?
答案 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) %';