oracle - 使用 Oracle 表作为输入参数编写 Oracle 存储过程

标签 oracle plsql

如何编写 Oracle 存储过程,以表 (X) 作为输入参数,并在过程内部使用表 X 来与另一个表 Y 联接?

表 X 将包含数千条记录。

不希望将表名作为 varchar 传递,然后使用动态 SQL(因此,此选项不适用)

最佳答案

从 19.6 开始,您可以创建 SQL 宏。这将返回一个带有查询片段的字符串。

在解析时,数据库将使用您传递给它的表来查找/替换表参数:

create or replace function f ( tab dbms_tf.table_t ) 
  return varchar2 sql_macro as
begin
  return 'select * from tab 
    join ( select level rn from dual connect by level <= 2 ) 
    on c1 = rn';
end f;
/

create table t1 (
  c1 int
);
create table t2 (
  c1 int
);

insert into t1 values ( 1 );
insert into t2 values ( 2 );


select * from f ( t1 );

C1       RN   
    1     1 

select * from f ( t2 );

C1       RN   
    2     2 

关于oracle - 使用 Oracle 表作为输入参数编写 Oracle 存储过程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64139587/

相关文章:

performance - hibernate v/s 存储过程或函数性能

java - 为什么 ArrayList 添加方法的返回类型不同?

java - 执行dao时出错

oracle - PL/SQL 局部变量转储

sql - 如何调用包中的函数

sql - 我什么时候应该在 PL/SQL 中使用过程或函数?

xml - Oracle - 验证日期格式 (yyyy-mm-ddThh24 :mi:ssZ) in XML against XSD

sql - Oracle 中 N'String' 与 U'String' 文字之间的区别

oracle - 未发生变异表异常

sql - PL/SQL更新触发错误