Oracle程序,在变量中放置多个记录

时间:2017-04-13 13:55:00

标签: sql oracle plsql

我试图创建我的第一个oracle程序。 select将返回多条记录;我需要能够将每个记录放在变量中,并在过程的后续操作中使用该记录。有什么帮助吗?

   key number;
   keyCount number;
   rub varchar2(50);
   srub varchar2(100);
   type varchar2(200);
   date varchar2(14);
   note varchar2(500);
   BEGIN
      SELECT KEY,COUNT(KEY),RUB,
      SRUB,TYPE ,DATE,NOTE FROM Student
      WHERE S_KEY = {key};

   END;

1 个答案:

答案 0 :(得分:2)

在PL / SQL中,我们需要将结果选择为匹配变量。一种方法是每列的单独变量(如图所示)。另一种方法是使用与查询项目匹配的行变量; find out more

你有一个聚合函数 - COUNT()所以你需要一个GROUP BY子句来定义非聚合列。你说你有多个记录,所以你需要填充一个集合而不是标量变量。 Find out more

你的程序看起来应该是这样的

   create or replace procedure my_first_proc
      ( p_key in student.s_key%type )
   as
     type my_rec is record (
         key number ,
         keyCount number ,
         rub varchar2(50); ,
         srub varchar2(100) ,
         type varchar2(200) ,
         date varchar2(14),
         note varchar2(500)
       );
      type my_rec_coll is table of my_rec;
      l_student_recs my_rec_coll;
   BEGIN
      SELECT KEY,COUNT(KEY),RUB,SRUB,TYPE ,DATE,NOTE   
      bulk collect into   l_student_recs 
      FROM Student
      WHERE S_KEY = p_key
      group by  KEY,RUB,SRUB,TYPE ,DATE,NOTE 
      ;
      for idx in l_student_recs.first() .. l_student_recs.last()
      loop
          -- do some processing here
          dbms_output.put_line('RUB = '||l_student_recs(idx).rub);
      end loop;
   EXCEPTION
        when no_data_found then
             raise_application_error(-01403, 'no student records for key='||p_key);
   END;

养成良好的习惯:

  • 使用合理的变量名称
  • 区分参数名称和局部变量
  • 处理可预测的例外