Account Options

  1. Sign in
The old Google Groups will be going away soon, but your browser is incompatible with the new version.
Google Groups Home
« Groups Home
Use a sequence to bulk collect into a collection?
There are currently too many topics in this group that display first. To make this topic appear first, remove this option from another topic.
There was an error processing your request. Please try again.
flag
  2 messages - Expand all  -  Translate all to Translated (View all originals)
The group you are posting to is a Usenet group. Messages posted to this group will make your email address visible to anyone on the Internet.
Your reply message has not been sent.
Your post was successful
 
From:
To:
Cc:
Followup To:
Add Cc | Add Followup-to | Edit Subject
Subject:
Validation:
For verification purposes please type the characters you see in the picture below or the numbers you hear by clicking the accessibility icon. Listen and type the numbers you hear
 
Patrick Demets  
View profile  
 More options Jun 5 2006, 11:45 pm
Newsgroups: comp.databases.oracle.server
From: "Patrick Demets" <notquiteclap...@HATESPAMshaw.ca>
Date: Tue, 06 Jun 2006 03:45:17 GMT
Local: Mon, Jun 5 2006 11:45 pm
Subject: Use a sequence to bulk collect into a collection?
Can bulk collect be used with a sequence to populate a collection of unique
surrogate keys?  I'm getting the following error:

ORA-01403 no data found
Cause: In a host language program, all records have been fetched. The return
code from the fetch was +4, indicating that all records have been returned
from
the SQL query.
Action: Terminate processing for the SELECT statement.

The code I've written is as follows (some code cut out):

  CURSOR sqnc_csr IS
    SELECT eqpmt_sqnc.NEXTVAL FROM dual;

    TYPE ew_eqmt_asgn_id_t IS TABLE OF EW_EQMT_ASGN.ew_eqmt_asgn_id%TYPE
INDEX BY BINARY_INTEGER;
    TYPE eqpmnt_asgnmn_id_t IS TABLE OF EW_EQMT_ASGN.eqpmnt_asgnmn_id%TYPE
INDEX BY BINARY_INTEGER;
    TYPE work_item_id_t IS TABLE OF EW_EQMT_ASGN.work_item_id%TYPE INDEX BY
BINARY_INTEGER;

    tbl_ew_eqmt_asgn_id       ew_eqmt_asgn_id_t;
    tbl_eqpmnt_asgnmn_id      eqpmnt_asgnmn_id_t;
    tbl_work_item_id          work_item_id_t;

  --------------------------------------------------------------------------
--

    BEGIN

      OPEN ew_eqmt_asgn_csr;
      LOOP

        EXIT WHEN ew_eqmt_asgn_csr%NOTFOUND;

        FETCH ew_eqmt_asgn_csr BULK COLLECT INTO
          tbl_rowid
        , tbl_ew_eqmt_asgn_id
        , tbl_eqpmnt_asgnmn_id
        , tbl_work_item_id;

      END LOOP;

      CLOSE ew_eqmt_asgn_csr;

      OPEN sqnc_csr;
      FETCH sqnc_csr BULK COLLECT INTO tbl_ew_eqmt_asgn_id;
      CLOSE sqnc_csr;

      OPEN sqnc_csr;
      FETCH sqnc_csr BULK COLLECT INTO tbl_eqpmnt_asgnmn_id;
      CLOSE sqnc_csr;

      OPEN sqnc_csr;
      FETCH sqnc_csr BULK COLLECT INTO tbl_work_item_id;
      CLOSE sqnc_csr;

DBMS_OUTPUT.PUT_LINE ('tbl_ew_eqmt_asgn_id(12)= ' || TO_CHAR
(tbl_ew_eqmt_asgn_id(12)));

At this point the proc bombs with the message above.  Same results whether I
use an explicit cursor or an implicit one.  Manual not too helpful in this
respect.

Any ideas?

Thanks,

Patrick Demets


 
You must Sign in before you can post messages.
To post a message you must first join this group.
Please update your nickname on the subscription settings page before posting.
You do not have the permission required to post.
fitzjarrell@cox.net  
View profile  
 More options Jun 6 2006, 7:29 am
Newsgroups: comp.databases.oracle.server
From: "fitzjarr...@cox.net" <fitzjarr...@cox.net>
Date: 6 Jun 2006 04:29:51 -0700
Local: Tues, Jun 6 2006 7:29 am
Subject: Re: Use a sequence to bulk collect into a collection?
Comments embedded.

And this cursor returns one record.

Bulk collect on one record?

>       OPEN sqnc_csr;
>       FETCH sqnc_csr BULK COLLECT INTO tbl_eqpmnt_asgnmn_id;
>       CLOSE sqnc_csr;

Again, using BULK COLLECT on one record ...

>       OPEN sqnc_csr;
>       FETCH sqnc_csr BULK COLLECT INTO tbl_work_item_id;
>       CLOSE sqnc_csr;

And one final time makes three records you've fetched into three
separate PL/SQL tables.

> DBMS_OUTPUT.PUT_LINE ('tbl_ew_eqmt_asgn_id(12)= ' || TO_CHAR
> (tbl_ew_eqmt_asgn_id(12)));

You don't have 12 values in your table, you have one.

> At this point the proc bombs with the message above.  Same results whether I
> use an explicit cursor or an implicit one.  Manual not too helpful in this
> respect.

> Any ideas?

You might think of creating a DUMMY table containing 12 rows (or more)
to fetch 12 sequence values (or more) at a time.  BULK COLLECT won't do
you any good with the cursor you currently have since DUAL returns one
record:

SQL> create sequence testseq;

Sequence created.

SQL> create table testtbl as select rownum myval from user_objects
where rownum < 13;

Table created.

SQL> select testseq.nextval from testtbl;

   NEXTVAL
----------
         1
         2
         3
         4
         5
         6
         7
         8
         9
        10
        11
        12

12 rows selected.

Your BULK COLLECT would then provide the results you were originally
expecting.

> Thanks,

> Patrick Demets

David Fitzjarrell

 
You must Sign in before you can post messages.
To post a message you must first join this group.
Please update your nickname on the subscription settings page before posting.
You do not have the permission required to post.
End of messages
« Back to Discussions « Newer topic     Older topic »