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;
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;
/
2条答案
按热度按时间eit6fx6z1#
是的......但不是你怎么做的,有两个原因:
INDEX BY PLS_INTEGER
,所以你有一个关联数组。首先,你需要创建一个类型:
然后你可以运行PL/SQL块:
COLUMN_VALUE
,而不是表中的任何特定标识符。fgw7neuy2#
我同意OP,这是一个愚蠢的语言设计。OP想要的是一个作用域为查询会话的表变量,而不是数据库中的一个新的持久表。
在MSSQL中,这非常简单。在PL/SQL中,这基本上是不可能的。这是一个该死的愚蠢的设计。