0 sql oracle plsql where-clause
我有一个 Employee 表,我需要根据某种条件知道员工的数量,该条件将采用 varchar2 的形式
请忽略任何语法错误
procedure getEmpCount( pCondition in varchar2)
begin
--pCondition can be anything say "employee_salaray >30000"
select count(*) from Employee where employee_age > 35 and **pCondition**
end
Run Code Online (Sandbox Code Playgroud)
我怎样才能使上述查询工作。提前致谢
一种选择是动态 SQL,这是一个坏主意,因为它根本无法扩展并且容易受到 SQL 注入。如果我是你,我不会这样做。无论如何,方法如下:
程序:
SQL> create or replace procedure getEmpCount( pCondition in varchar2)
2 is
3 l_cnt number;
4 begin
5 --pCondition can be anything say "employee_salaray >30000"
6
7 execute immediate 'select count(*) from emp where deptno = 10 and ' ||
8 pCondition into l_cnt;
9
10 dbms_output.put_line('count = ' || l_cnt);
11 end;
12 /
Procedure created.
Run Code Online (Sandbox Code Playgroud)
样本数据:
SQL> select deptno, ename, sal from emp where deptno = 10;
DEPTNO ENAME SAL
---------- ---------- ----------
10 CLARK 2450
10 KING 10000
10 MILLER 1300
Run Code Online (Sandbox Code Playgroud)
测试:
SQL> set serveroutput on
SQL>
SQL> exec getempcount('sal > 2000');
count = 2
PL/SQL procedure successfully completed.
SQL>
Run Code Online (Sandbox Code Playgroud)