PL/SQL 使用 table 变量作为查询 table

PL/SQL Use table variable as query table

在PL/SQL中是否可以使用变量作为查询a table?

尝试过:

declare
   TYPE t_name IS TABLE OF varchar(50) INDEX BY PLS_INTEGER;
   v_names t_name;
begin
select name bulk collect into v_names from my_table;

select name from v_names where name = 'Max';
end;

是的...但不是您的做法,原因有二:

  • 首先,你没有集合(你称之为 table 变量),因为你已经使用 INDEX BY PLS_INTEGER 所以你有一个关联数组。
  • 其次,您只能在 SQL 查询中使用集合,其中数据类型已在 SQL 范围内声明(而您的数据类型在 PL/SQL 中声明)。

因此,首先您需要创建类型:

CREATE TYPE t_name IS TABLE OF VARCHAR2(50);

然后你可以 运行 PL/SQL 块:

DECLARE
  v_names t_name;
  v_name  VARCHAR2(50);
BEGIN
  SELECT name
  BULK COLLECT INTO v_names
  FROM my_table;

  SELECT COLUMN_VALUE
  INTO   v_name
  FROM   TABLE(v_names)
  WHERE  COLUMN_VALUE = 'Max';
  
  DBMS_OUTPUT.PUT_LINE( v_name );
END;
/

(注意:第二个查询中的 table 集合表达式具有伪列 COLUMN_VALUE 而不是来自 table 的任何特定标识符。)

db<>fiddle here