动态计数查询绑定变量不存在

dymanic count query bind variable does not exist

我想为视图 employeesview 执行动态计数 所以我应用了当前函数

CREATE OR REPLACE FUNCTION get_num_of_employees
RETURN NUMBER
IS
  v_query_str VARCHAR2(1000);
  v_num_of_employees NUMBER;
BEGIN
  v_query_str := 'select count(*) into :countresult  from employeesview'; 

  EXECUTE IMMEDIATE v_query_str
    USING out v_num_of_employees;
  RETURN v_num_of_employees;
END;

但是当我执行这个函数时

select get_num_of_employees from dual

我收到错误 01006.00000 - "bind variable does not exist"

我的功能是正确的还是有任何其他方法可以执行动态计数

这是一种运行动态SELECT查询并将结果保存到变量中的方法:

CREATE OR REPLACE FUNCTION get_num_of_employees
RETURN NUMBER
IS
  v_query_str VARCHAR2(1000);
  v_num_of_employees NUMBER;
BEGIN
  v_query_str := 'select count(*) from employeesview'; 

  EXECUTE IMMEDIATE v_query_str
    into v_num_of_employees;
  RETURN v_num_of_employees;
END;

在这种情况下,您不需要动态 SQL,因此我假设您出于某种原因在实际代码中需要它。

如果你没有充分的理由使用动态SQL,你的函数可以简化:

CREATE OR REPLACE FUNCTION get_num_of_employees
RETURN NUMBER
IS
  v_num_of_employees NUMBER;
BEGIN
  select count(*) into v_num_of_employees from employeesview;
  RETURN v_num_of_employees;
END;

非常感谢,但我已经简单地解决了它

CREATE OR REPLACE FUNCTION get_num_of_employees
RETURN NUMBER
IS
  v_query_str VARCHAR2(1000);
  v_num_of_employees NUMBER;
BEGIN
  v_query_str := 'select count(*)  from employeesview'; 

  EXECUTE IMMEDIATE v_query_str
    into v_num_of_employees ;
  RETURN v_num_of_employees;  
END;

并且您可以在 v_query_str 中附加任何过滤器或稍后将视图名称作为参数传递以实现真正的动态执行