gpt4 book ai didi

sql - PL/SQL 使用表变量作为查询表

转载 作者:行者123 更新时间:2023-12-05 06:00:42 25 4
gpt4 key购买 nike

在 PL/SQL 中是否可以使用变量来查询表?

尝试过:

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;

最佳答案

是的......但不是你是怎么做的,原因有二:

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

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

CREATE TYPE t_name IS TABLE OF VARCHAR2(50);

然后您可以运行 PL/SQL block :

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;
/

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

db<> fiddle here

关于sql - PL/SQL 使用表变量作为查询表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67510107/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com