Oracle 如何从两个字符串列生成表名?
我需要制作一个PL/SQL脚本。 输入是模式名和表名。如何将其转换为表名 例如,我想这样做: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
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;