Plsql 使用execute immediate对表行进行计数的查询

Plsql 使用execute immediate对表行进行计数的查询,plsql,Plsql,编写一个名为get_total_records的函数,将表名作为参数传递,并获取表中包含的记录数 请使用多个表测试您的函数。它是哪个数据库?如果是Oracle,这里有一个选项: SQL> CREATE OR REPLACE FUNCTION get_total_records (par_table_name IN VARCHAR2) 2 RETURN NUMBER 3 IS 4 retval NUMBER; 5 BEGIN 6 EXECUT

编写一个名为
get_total_records
的函数,将表名作为参数传递,并获取表中包含的记录数


请使用多个表测试您的函数。

它是哪个数据库?如果是Oracle,这里有一个选项:

SQL> CREATE OR REPLACE FUNCTION get_total_records (par_table_name IN VARCHAR2)
  2     RETURN NUMBER
  3  IS
  4     retval  NUMBER;
  5  BEGIN
  6     EXECUTE IMMEDIATE
  7        'select count(*) from ' || DBMS_ASSERT.sql_object_name (par_table_name)
  8        INTO retval;
  9
 10     RETURN retval;
 11  END;
 12  /

Function created.

SQL> SELECT get_total_records ('emp') result FROM DUAL;

    RESULT
----------
        14

SQL> SELECT get_total_records ('dept') result FROM DUAL;

    RESULT
----------
         4

SQL> SELECT get_total_records ('does_not_exist') result FROM DUAL;
SELECT get_total_records ('does_not_exist') result FROM DUAL
       *
ERROR at line 1:
ORA-44002: invalid object name
ORA-06512: at "SYS.DBMS_ASSERT", line 383
ORA-06512: at "SCOTT.GET_TOTAL_RECORDS", line 6


SQL>

它是哪个数据库?如果是Oracle,这里有一个选项:

SQL> CREATE OR REPLACE FUNCTION get_total_records (par_table_name IN VARCHAR2)
  2     RETURN NUMBER
  3  IS
  4     retval  NUMBER;
  5  BEGIN
  6     EXECUTE IMMEDIATE
  7        'select count(*) from ' || DBMS_ASSERT.sql_object_name (par_table_name)
  8        INTO retval;
  9
 10     RETURN retval;
 11  END;
 12  /

Function created.

SQL> SELECT get_total_records ('emp') result FROM DUAL;

    RESULT
----------
        14

SQL> SELECT get_total_records ('dept') result FROM DUAL;

    RESULT
----------
         4

SQL> SELECT get_total_records ('does_not_exist') result FROM DUAL;
SELECT get_total_records ('does_not_exist') result FROM DUAL
       *
ERROR at line 1:
ORA-44002: invalid object name
ORA-06512: at "SYS.DBMS_ASSERT", line 383
ORA-06512: at "SCOTT.GET_TOTAL_RECORDS", line 6


SQL>