用一些列 PL/SQL 定义一个集合
Posted
技术标签:
【中文标题】用一些列 PL/SQL 定义一个集合【英文标题】:Define a collection with some columns PL/SQL 【发布时间】:2017-04-05 09:18:21 【问题描述】:我必须创建一个包含 2 个字段的集合,然后创建一个具有该集合类型的变量作为参数的过程。 如果我只有 2 个字段,我怎么能创建一个集合:
TYPE an_array IS VARRAY(10) OF varchar2(20);
例如列:id、name; (不知道怎么插入)。
然后,我必须创建程序,
CREATE OR REPLACE PROCEDURE test_proc (p_array an_array) AS
但我必须使用我的列在此过程中执行某些操作。 例如,我考虑一个表 employees (id number, name varchar2(20)); 我的程序应该是这样的:
CREATE OR REPLACE PROCEDURE test_proc (p_array an_array) AS
CURSOR cs IS select * from employees;
v_row employees%ROWTYPE;
BEGIN
OPEN cs;
LOOP
FETCH cs into v_row ;
EXIT WHEN cs%NOTFOUND;
IF (mod (v_row.id,2 ) = 0 ) then
THE ID FIELD FROM MY COLLETION := v_row.id;
THE NAME FIELD FROM MY COLLECTION := v_row.name;
END LOOP;
CLOSE cs;
END;
`
【问题讨论】:
【参考方案1】:您可以使用记录集合。
类似的东西
declare
type TRec is record(
col_1 varchar2(20),
col_2 number);
type TList is table of TRec;
t_l TList := TList();
r_l TRec;
procedure foo(a_par TList, ai_elem int) is
begin
if a_par.Exists(ai_elem) then
dbms_output.put_line('Value at pos ' || ai_elem || ' is :' || a_par(ai_elem)
.col_2);
else
dbms_output.put_line('There is no element in position :' || ai_elem);
end if;
end;
begin
r_l.col_1 := 'abc';
r_l.col_2 := 10;
t_l.Extend;
t_l(t_l.Count) := r_l;
foo(t_l, 1);
foo(t_l, 3);
end;
【讨论】:
好的,但是我将如何声明程序?我的意思是,我必须在一个匿名块中声明我的记录,那么如何在它之外获取集合? 我不太明白,为什么你必须在匿名块中“声明”你需要的类型。可见范围呢?如果您在匿名块中声明您的类型,那么您也已经在该块中声明了您的过程。 是的,没错,我只需要在同一个块中声明它们,谢谢。以上是关于用一些列 PL/SQL 定义一个集合的主要内容,如果未能解决你的问题,请参考以下文章
在咨询3列信息时,ORACLE PL / SQL错误与存储过程有关