dymanic count查询绑定变量不存在

时间:2017-02-28 10:40:36

标签: oracle oracle12c

我想为查看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 - “绑定变量不存在”

是我的功能还是有其他方法来执行动态计数

2 个答案:

答案 0 :(得分:1)

这是一种运行动态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;

答案 1 :(得分:0)

非常感谢,但我只是按照以下方式解决了这个问题

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中附加任何过滤器或稍后将视图名称作为参数传递以实现真正的动态执行