创建一个执行以下功能的“item_list函数”(PLSQL)

时间:2017-11-30 21:08:04

标签: function dynamic plsql

我正在尝试创建一个具有以下功能的"item_list function"

  1. TRUNC(SYSDATE) + 1指定为pv_end_date参数的DEFAULT值。
  2. 创建一个镜像item_obj对象类型的item_rec记录类型。
  3. 创建一个弱类型游标的item_cur系统引用游标。
  4. 创建item_rec数据类型的item_row变量。
  5. 创建item_tab集合类型的item_set变量,并创建item_tab集合的空实例。
  6. 创建一个stmt字符串变量以保存本机动态SQL(NDS)变量。
  7. 将NDS字符串分配给stmt变量。该字符串应返回以下列:

    • item_title,别名为title
    • item_subtitle,别名为subtitle
    • item_rating,别名为rating
    • item_release_date,别名为release_date

    并且WHERE子句应该检查MPAA的item_rating_agency值和item_release_date之间的值{/ 1}}

    • 绑定pv_start_datepv_end_date值的变量
      1. 使用stmt动态语句打开item_cur系统引用游标,并在pv_start_date子句中分配pv_end_dateUSING个变量。
      2. item_cur系统引用光标提取到item_row数据类型的item_rec变量中。
      3. item_set集合的item_tab变量中扩展空间。
      4. 使用item_row变量创建item_set集合的实例。
  8. 我已经创建了item_objitem_tab 以下是我需要帮助的部分:

    --create a item_list function
    CREATE OR REPLACE
      FUNCTION item_list
      ( pv_start_date   DATE
      , pv_end_date     DATE )
    
      RETURN item_tab IS
    
        /* Declare a record type. */
        TYPE item_rec IS RECORD
        ( title           VARCHAR2(60)
        , subtitle        VARCHAR2(60)
        , rating          VARCHAR2(8)
        , release_date    DATE);
    
        /* Declare reference cursor for an NDS cursor. */
        item_cur   SYS_REFCURSOR;
    
        /* Declare a customer row for output from an NDS cursor. */
        item_row   ITEM_REC;
        item_set   ITEM_TAB := item_tab();
    
        /* Declare dynamic statement. */
        stmt  VARCHAR2(2000);
    
    BEGIN
        /* Create a dynamic statement. */
    
    stmt := SELECT 'title,  rating'|| FROM   'item '|| WHERE 'REGEXP_LIKE(release_date,''^.*''||:input||''.*$'')';
    
        /* Open and read dynamic cursor. */
        OPEN item_cur FOR stmt USING pv_start_date AND pv_end_date;
        LOOP
          /* Fetch the cursror into a customer row. */
          FETCH item_cur INTO item_row;
          EXIT WHEN item_cur%NOTFOUND;
    
          /* Extend space and assign a value collection. */      
          item_set.EXTEND;
          item_set(item_set.COUNT) :=
            item_obj   ( item_title        => item_title.title
                       , item_subtitle     => item_subtitle.subtitle
                       , item_rating       => item_rating.rating
                       , item_release_date => item_release_date.release_date );
        END LOOP;
    
        /* Return customer set. */
        RETURN item_set;
      END item_list;
    /
    
    --call the customer_list function
    desc item_list
    

0 个答案:

没有答案