PLSQL简单的选择到记录变量

问题描述 投票:0回答:2

我已经声明了一个记录变量,在某些时候,我得到了两个值,我必须把它们移到我的记录变量中。

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 

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

sql select data-structures plsql record
2个回答
2
投票

是的,你可以这样做。只要选择的列在数量和类型上与目标变量相匹配即可。

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
投票

评论 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;   
© www.soinside.com 2019 - 2024. All rights reserved.