将条件附加到 where 子句(pl/sql),其中条件作为输入 varchar2

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)

我怎样才能使上述查询工作。提前致谢

Lit*_*oot 5

一种选择是动态 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)