Plsql 使用记录类型的过程

Plsql 使用记录类型的过程,plsql,record,procedure,Plsql,Record,Procedure,我想创建一个过程,返回前五条记录的列表。我必须使用记录类型和表类型。我做错了什么 CREATE OR REPLACE PROCEDURE procedure_example(v_table OUT v_rec) IS CURSOR cur1 IS SELECT * FROM ( SELECT type_note, note FROM dd_note ORDER BY type_note) WHERE rownum <

我想创建一个过程,返回前五条记录的列表。我必须使用记录类型和表类型。我做错了什么

CREATE OR REPLACE PROCEDURE procedure_example(v_table OUT v_rec) IS
  CURSOR cur1 IS
    SELECT * FROM (
      SELECT
        type_note,
        note
      FROM dd_note ORDER BY type_note)
    WHERE rownum < 5;

  TYPE v_rec IS RECORD ( v_type_note NUMBER(2)
                       , v_note VARCHAR(30));
  TYPE v_table IS TABLE OF v_rec INDEX BY BINARY_INTEGER;

  BEGIN

    OPEN cur1;

    LOOP
      FETCH cur1 INTO v_type_note, v_note;

      dbms_output.put_line(v_type_note || '. --- ' || v_note);

      EXIT WHEN cur1%NOTFOUND;
      --enter code here
    END LOOP;

    CLOSE cur1;
  END procedure_example;

您声明类型的位置是错误的。必须在该过程所属的包中(而不是在此过程中)声明类型v_rec和类型v_表。下面是代码的改进版本。首先,在包中声明以下类型:

 TYPE v_rec IS RECORD(
    v_type_note number(2),
    v_note varchar(30));
 TYPE v_table is table of v_rec index by pls_integer;
这是您的函数:

  create or replace PROCEDURE procedure_example (out_table OUT v_table) IS
     BEGIN
        select type_note, note BULK COLLECT into out_table from (select type_note, note from dd_note order by type_note) where rownum < 5
     FOR i in 1..out_table.COUNT LOOP
     dbms_output.put_line(out_table(i).v_type_note || '. --- ' || out_table(i).v_note);
     end loop;
  END procedure_example;

欢迎来到StackOverflow。请阅读并遵循帮助文档中的发布指南。适用于这里。请显示代码在当前状态下的功能。