我已经声明了一个记录变量,在某些时候,我得到了两个值,我必须把它们移到我的记录变量中。
Declare
TYPE WORK_REC IS RECORD(
STRING1 VARCHAR (21),
NUMBER1 NUMBER (05)
);
TARGET_REC WORK_REC;
...
在某些时候,我得到了两个值,我必须把它们移到我的记录变量中... 有没有可能像这样使用一个单一的SELECT INTO?
SELECT (<PROPER STRING VALUE> , <PROPER NUMBER VALUE> ) INTO TARGET_REC
这里的重点是我想用一种简单的维护方式来填充我的记录。
是的,你可以这样做。只要选择的列在数量和类型上与目标变量相匹配即可。
create table rec_test( s1 varchar2(21), n1 number(5));
insert into rec_test (s1,n1) values('ABC',2) ;
declare
type work_rec is record(
string1 varchar2 (21),
number1 number (05)
);
target_rec work_rec;
begin
select s1, n1
into target_rec
from rec_test;
dbms_output.put_line( 'rec=(' || target_rec.string1 || ',' || target_rec.number1 || ')' );
end ;
评论 1.在某一时刻,我得到了两个值,我必须将其移动到......是的,你可以这样做。
在某些时候,我得到两个值,我必须把它们移到我的记录变量中。
SELECT ( , ) INTO TARGET_REC
评论2.很好,但我的值不是来自于一个表格--它们是我从字符串运算或算术运算中得到的简单变量。
很好,但我的值并不是来自一个表,而是我从字符串运算或算术运算中得到的简单变量。
如果我从上面的2条评论中可以理解,你是想把你的值填在 collection
的字符串值,然后使用 Collection
在...中 Select
语句来填充另一个集合变量。
当然,你也可以用 collection
使用字符串,如下图所示,但是你不需要一个 SELECT
语句来移动已经填充的集合的值到另一个集合。请看下面的演示& 阅读内联注释以了解更多。
declare
type work_rec is record(
string1 varchar2 (21),
number1 number (05)
);
type target_rec is table of work_rec index by pls_integer;
v_target_rec target_rec;
var target_rec;
begin
-- Assiging values to the collection elements more than once
v_target_rec(1).string1 := 'ABC'; --<-- first Element
v_target_rec(1).number1 := 2;
v_target_rec(2).string1 := 'CDE'; --<-- Second Element
v_target_rec(2).number1 := 4;
--Displaying record elements
for rec in 1..v_target_rec.count
Loop
dbms_output.put_line( 'rec=(' || v_target_rec(rec).string1 || ',' || v_target_rec(rec).number1 || ')' );
End loop;
/* This part is simply reduced by using assignment operator below***
SELECT (<PROPER STRING VALUE> , <PROPER NUMBER VALUE> ) INTO TARGET_REC
*/
var := v_target_rec; --<--replacement of Select Statement.
for rec in 1..var.count
Loop
dbms_output.put_line( 'New-rec=(' || var(rec).string1 || ',' || var(rec).number1 || ')' );
End loop;
End;