pl/sql简单select into记录变量

xu3bshqb  于 2021-08-09  发布在  Java
关注(0)|答案(2)|浏览(306)

我声明了一个记录变量:

Declare
TYPE WORK_REC IS RECORD(
STRING1  VARCHAR (21),  
NUMBER1  NUMBER  (05)
);
TARGET_REC WORK_REC;
...

在某个时刻,我得到两个值,我必须移动到我的记录变量。有没有可能像这样使用一个单独的选择?

SELECT (<PROPER STRING VALUE> , <PROPER NUMBER VALUE> ) INTO TARGET_REC

这里的重点是我想用一种简单的维护方式来填写我的记录。

nfs0ujit

nfs0ujit1#

是的,你能做到。只要选定的列在数量和类型上与目标变量匹配。

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

m2xkgtsf2#

评论1:
在某个时刻,我得到两个值,我必须移动到我的记录变量。
选择(,)到目标\u rec
评论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;

相关问题