Oracle 如何从两个字符串列生成表名?

Oracle 如何从两个字符串列生成表名?,oracle,plsql,Oracle,Plsql,我需要制作一个PL/SQL脚本。 输入是模式名和表名。如何将其转换为表名 例如,我想这样做: create or replace procedure proc(schema in varchar2, table in varchar2) is begin select * from 'schema.table'; end; begin proc('db', 'items'); end; 所以我想从db.items获取所有信息 我已经尝试过concat,(“schema”| |“.”| |“t

我需要制作一个PL/SQL脚本。 输入是模式名和表名。如何将其转换为表名

例如,我想这样做:

create or replace procedure proc(schema in varchar2, table in varchar2) is
begin
select * from 'schema.table';
end;

begin
proc('db', 'items');
end;
所以我想从db.items获取所有信息


我已经尝试过concat,
(“schema”| |“.”| |“table”)
,将它放在变量中,但没有一个有效。

您需要的是动态sql。返回并打印行数的示例(您可以根据需要进行相应更改):


您应该只在内部使用此类过程,不允许用户输入变量,因为这可能会导致安全问题(SQL注入)。如果只需要记录数,最好
从DBA\u表中选择NUM\u行,其中OWNER=p\u schema和TABLE\u NAME=p\u TABLE
。。。
SQL> set serveroutput on  -- to be able to see the printed results.
SQL> create or replace procedure proc(p_schema in varchar2, p_table in varchar2) is
    v_sql varchar2(100);
    v_result number;
begin
    v_sql := 'select count(*) from :1' || '.' || ':2';
    EXECUTE IMMEDIATE v_sql into v_result USING p_schema, p_table;
    DBMS_OUTPUT.PUT_LINE ('Total rows in table: '|| v_result );
end;