将表名作为plsql参数传递 [英] passing in table name as plsql parameter

查看:216
本文介绍了将表名作为plsql参数传递的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想编写一个函数来返回表的行数,该表的名称作为变量传递.这是我的代码:

I want to write a function to return the row count of a table whose name is passed in as a variable. Here's my code:

create or replace function get_table_count (table_name IN varchar2)
  return number
is
  tbl_nm varchar(100) := table_name;
  table_count number;
begin
  select count(*)
  into table_count
  from tbl_nm;
  dbms_output.put_line(table_count);
  return table_count;
end;

我收到此错误:

FUNCTION GET_TABLE_COUNT compiled
Errors: check compiler log
Error(7,5): PL/SQL: SQL Statement ignored
Error(9,8): PL/SQL: ORA-00942: table or view does not exist

我知道tbl_nm被解释为一个值而不是一个引用,我不确定如何对其进行转义.

I understand that tbl_nm is being interpreted as a value and not a reference and I'm not sure how to escape that.

推荐答案

您可以使用动态SQL:

You can use dynamic SQL:

create or replace function get_table_count (table_name IN varchar2)
  return number
is
  table_count number;
begin
  execute immediate 'select count(*) from ' || table_name into table_count;
  dbms_output.put_line(table_count);
  return table_count;
end;

还有一种间接的方法来获取行数(使用系统视图):

There is also an indirect way to get number of rows (using system views):

create or replace function get_table_count (table_name IN varchar2)
  return number
is
  table_count number;
begin
  select num_rows
    into table_count
    from user_tables
   where table_name = table_name;

  return table_count;
end;

仅当您在调用此功能之前已在表上收集统计信息时,第二种方法才有效.

The second way works only if you had gathered statistics on table before invoking this function.

这篇关于将表名作为plsql参数传递的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆