PL/SQL leaves cursors open?

I have been researching into what might look like a resource drain in an Oracle 7.3.4 database we have on a SCO OpenServevr 5.0.5 server.
There are a couple of applications written in PRO*C (compiled on Solaris with Oracle 8.1.5) always running that keep connections open to the DB. All exchange of data between the apps and the db happens via calls to stored procedures.
Examining the state of the connections, I noticed that the number of open cursors and UGA/PGA memory used seems to increase over time, and never stabilizes.
I experimented a bit and noticed that even if I open a session via SQL/PLUS and call an extermely simple procedure that opens a cursors, fetches it, closes it and then commits, the cursor remains open until the session is closed (I examined the session with Toad and Enterprise manager - and cursor cache count is set to 0). Is the open cursor consuming resources (e.g. using precious ram of the SGA) even after the procedure is ended? And if so, how can I release a maximum of resources when my applications are idle, without having to close and reopen the session?
Thanks, Gaetano Giunta

If the open cursors are too many then
ALTER SYSTEM SET CURSOR_SHARING = FORCE;
Works only with oracle9i
uv to set ur initparam CURSOR_SHARING=FORCE.
Which will try using bind variables only.
Check docs on cursor_sharing may be u may get fair idea on bringing down cursor openings....

Similar Messages

  • Cursor open error SQLSTT - 72000, SQL code - 969

    We have purchased a product called Access Manager for DB2 and installed it on our AS400. This gives us the connectivitiy to Oracle server with which we do the Warehouse management software interface using our legacy system on AS400.
    I have written several programs in SQLRPGLE and not quite sure as to how I can handle errors coming out of Oracle server.
    As per my knowledge in my programs, I do
    declare cursor
    open cursor
    fetch
    dow look for sqlstate
    fetch next row
    enddo
    close cursor
    I am also new to this much of SQL.
    Now, my programs are running in production and works just fine if we don;t have any issues with oracle server (database server down etc.).
    My question is if the database server goes down for any reason, my SQLRPGLE progam starts giving me cursor not open errors, the actual error is as follows:
    Connection to relational database HJAWCD1 already exists.
    ARDUPAR: ARDUPAR: rc=-1(OCI_ERROR) from OCIStmtExecute when asking for
    Describe-Info
    ARDUPAR(1): ORA-03114: not connected to ORACLE
    ARDAROC: rc = -1 from parse
    SQLSTATE class unknown - SQLSTATE 72000, SQLCODE -969.
    Cursor SEHOST not open.
    Cursor SEHOST not open.
    Cursor SEHOST not open.
    So although, the connection exist between the AS400 and Oracle server as suggested from first statement, but then the cursor is giving me problems of not opening.
    what I would like to know is how do I check in my SQL statement the error and somehow reconnect and open the cursor again.
    Please help in this regard, since I am not finding any help from iseries world becuase no one seems to have knowledge about this product that we have installed and I don;t have too mcuh of documentation on the product nor do I have any sample handling messages program using RPGLE between oracle and AS400 using the product.
    Regards
    Farhan Qadri

    It's been over a decade since I worked on an AS/400 (iSeries), but I've seen an ORA-03114 is thrown from the OCI when you've attempted an illegal statement. That error typically means you are no longer connected to the database. I'd guess that your new application has a defective RPG error management routine.
    Good luck, Michael

  • Sql exception : maximum open cursors exceeded

    I run applicatio to insert data into the table, and update data into the table, when it processes more than 800 record, it throws the sql exception :maximum open cursors exceeded.
    Who knows the reason?
    Thanks.

    I have a similar problem where in I close the Result set, Statement and close the connection in a finally block. Even though, the connection.close() executes sucessfully, with no exceptions being thrown, I still see the connection opened in ORacle. This builds up connections for our application and by the end of the day we are up with about 500 connections open and rising.
    After closing the connection, I did check the value for connection.isClosed() and it still says false (like before the connection was closed). Since we are using a custom Connection manager to pool the connections, my interpretation is that even after the connection is closed, it doesn't get released. I have tried setting the connection to Null, used the finalize method to still check for connection != null and do one more close(), but still the connection is still open.
    Am I mistaken in my thinking that even though the connection seems to be closed(), it doesn't get released until the GC runs and picks it for disposal? For every job, after the process is completed we have about 7 open connections and at times the number stays at 7 for some more jobs (Web application driven by servlets and some rmi in the background process). I thne see a surge in the connection after some more jobs are processed and so am not sure whether its the connection manager to blame. Could any one have any pointers on this issue.
    Thanks for your response.

  • Too many Cursors open error

    I have been getting this error in my Jdeveloper App.
    ORA-01000 : maximum open cursors exceeded.
    We have open cursors set at 220. I am using straight JDBC thin
    to call the database (8.1.5) and have been closing ResultSets
    the best I can. It happens after I use the app for a little bit.
    Any suggestions on what is causing this.
    PS
    This is a test database and I am the only one on it.
    Thanks
    Greg
    null

    PreparedStatement ps = null;
    RsultSet rs = null;
    try {
    // Do work here
    } catch (Exception erx) {
    // handle error
    } finally {
    try { rs.close(); } catch {}
    try { ps.close(); } catch {}
    In this way, you should never leave a cursor open.
    null

  • PL/SQL 101 : Cursors and SQL Projection

    PL/SQL 101 : Cursors and SQL Projection
    This is not a question, it's a forum article, in reponse to the number of questions we get regarding a "dynamic number of columns" or "rows to columns"
    There are two integral parts to an SQL Select statement that relate to what data is selected. One is Projection and the other is Selection:-
    Selection is the one that we always recognise and use as it forms the WHERE clause of the select statement, and hence selects which rows of data are queried.
    The other, SQL Projection is the one that is less understood, and the one that this article will help to explain.
    In short, SQL Projection is the collective name for the columns that are Selected and returned from a query.
    So what? Big deal eh? Why do we need to know this?
    The reason for knowing this is that many people are not aware of when SQL projection comes into play when you issue a select statement. So let's take a basic query...
    First create some test data...
    create table proj_test as
      select 1 as id, 1 as rn, 'Fred' as nm from dual union all
      select 1,2,'Bloggs' from dual union all
      select 2,1,'Scott' from dual union all
      select 2,2,'Smith' from dual union all
      select 3,1,'Jim' from dual union all
      select 3,2,'Jones' from dual
    ... and now query that data...
    SQL> select * from proj_test;
             ID         RN NM
             1          1 Fred
             1          2 Bloggs
             2          1 Scott
             2          2 Smith
             3          1 Jim
             3          2 Jones
    6 rows selected.
    OK, so what is that query actually doing?
    To know that we need to consider that all queries are cursors and all cursors are processed in a set manner, roughly speaking...
    1. The cursor is opened
    2. The query is parsed
    3. The query is described to know the projection (what columns are going to be returned, names, datatypes etc.)
    4. Bind variables are bound in
    5. The query is executed to apply the selection and identify the data to be retrieved
    6. A row of data is fetched
    7. The data values from the columns within that row are extracted into the known projection
    8. Step 6 and 7 are repeated until there is no more data or another condition ceases the fetching
    9. The cursor is closed
    The purpose of the projection being determined is so that the internal processing of the cursor can allocate memory etc. ready to fetch the data into. We won't get to see that memory allocation happening easily, but we can see the same query being executed in these steps if we do it programatically using the dbms_sql package...
    CREATE OR REPLACE PROCEDURE process_cursor (p_query in varchar2) IS
      v_sql       varchar2(32767) := p_query;
      v_cursor    number;            -- A cursor is a handle (numeric identifier) to the query
      col_cnt     integer;
      v_n_val     number;            -- numeric type to fetch data into
      v_v_val     varchar2(20);      -- varchar type to fetch data into
      v_d_val     date;              -- date type to fetch data into
      rec_tab     dbms_sql.desc_tab; -- table structure to hold sql projection info
      dummy       number;
      v_ret       number;            -- number of rows returned
      v_finaltxt  varchar2(100);
      col_num     number;
    BEGIN
      -- 1. Open the cursor
      dbms_output.put_line('1 - Opening Cursor');
      v_cursor := dbms_sql.open_cursor;
      -- 2. Parse the cursor
      dbms_output.put_line('2 - Parsing the query');
      dbms_sql.parse(v_cursor, v_sql, dbms_sql.NATIVE);
      -- 3. Describe the query
      -- Note: The query has been described internally when it was parsed, but we can look at
      --       that description...
      -- Fetch the description into a structure we can read, returning the count of columns that has been projected
      dbms_output.put_line('3 - Describing the query');
      dbms_sql.describe_columns(v_cursor, col_cnt, rec_tab);
      -- Use that description to define local datatypes into which we want to fetch our values
      -- Note: This only defines the types, it doesn't fetch any data and whilst we can also
      --       determine the size of the columns we'll just use some fixed sizes for this example
      dbms_output.put_line(chr(10)||'3a - SQL Projection:-');
      for j in 1..col_cnt
      loop
        v_finaltxt := 'Column Name: '||rpad(upper(rec_tab(j).col_name),30,' ');
        case rec_tab(j).col_type
          -- if the type of column is varchar2, bind that to our varchar2 variable
          when 1 then
            dbms_sql.define_column(v_cursor,j,v_v_val,20);
            v_finaltxt := v_finaltxt||' Datatype: Varchar2';
          -- if the type of the column is number, bind that to our number variable
          when 2 then
            dbms_sql.define_column(v_cursor,j,v_n_val);
            v_finaltxt := v_finaltxt||' Datatype: Number';
          -- if the type of the column is date, bind that to our date variable
          when 12 then
            dbms_sql.define_column(v_cursor,j,v_d_val);
            v_finaltxt := v_finaltxt||' Datatype: Date';
          -- ...Other types can be added as necessary...
        else
          -- All other types we'll assume are varchar2 compatible (implicitly converted)
          dbms_sql.DEFINE_COLUMN(v_cursor,j,v_v_val,2000);
          v_finaltxt := v_finaltxt||' Datatype: Varchar2 (implicit)';
        end case;
        dbms_output.put_line(v_finaltxt);
      end loop;
      -- 4. Bind variables
      dbms_output.put_line(chr(10)||'4 - Binding in values');
      null; -- we have no values to bind in for our test
      -- 5. Execute the query to make it identify the data on the database (Selection)
      -- Note: This doesn't fetch any data, it just identifies what data is required.
      dbms_output.put_line('5 - Executing the query');
      dummy := dbms_sql.execute(v_cursor);
      -- 6.,7.,8. Fetch the rows of data...
      dbms_output.put_line(chr(10)||'6,7 and 8 Fetching Data:-');
      loop
        -- 6. Fetch next row of data
        v_ret := dbms_sql.fetch_rows(v_cursor);
        -- If the fetch returned no row then exit the loop
        exit when v_ret = 0;
        -- 7. Extract the values from the row
        v_finaltxt := null;
        -- loop through each of the Projected columns
        for j in 1..col_cnt
        loop
          case rec_tab(j).col_type
            -- if it's a varchar2 column
            when 1 then
              -- read the value into our varchar2 variable
              dbms_sql.column_value(v_cursor,j,v_v_val);
              v_finaltxt := ltrim(v_finaltxt||','||rpad(v_v_val,20,' '),',');
            -- if it's a number column
            when 2 then
              -- read the value into our number variable
              dbms_sql.column_value(v_cursor,j,v_n_val);
              v_finaltxt := ltrim(v_finaltxt||','||to_char(v_n_val,'fm999999'),',');
            -- if it's a date column
            when 12 then
              -- read the value into our date variable
              dbms_sql.column_value(v_cursor,j,v_d_val);
              v_finaltxt := ltrim(v_finaltxt||','||to_char(v_d_val,'DD/MM/YYYY HH24:MI:SS'),',');
          else
            -- read the value into our varchar2 variable (assumes it can be implicitly converted)
            dbms_sql.column_value(v_cursor,j,v_v_val);
            v_finaltxt := ltrim(v_finaltxt||',"'||rpad(v_v_val,20,' ')||'"',',');
          end case;
        end loop;
        dbms_output.put_line(v_finaltxt);
        -- 8. Loop to fetch next row
      end loop;
      -- 9. Close the cursor
      dbms_output.put_line(chr(10)||'9 - Closing the cursor');
      dbms_sql.close_cursor(v_cursor);
    END;
    SQL> exec process_cursor('select * from proj_test');
    1 - Opening Cursor
    2 - Parsing the query
    3 - Describing the query
    3a - SQL Projection:-
    Column Name: ID                             Datatype: Number
    Column Name: RN                             Datatype: Number
    Column Name: NM                             Datatype: Varchar2
    4 - Binding in values
    5 - Executing the query
    6,7 and 8 Fetching Data:-
    1     ,1     ,Fred
    1     ,2     ,Bloggs
    2     ,1     ,Scott
    2     ,2     ,Smith
    3     ,1     ,Jim
    3     ,2     ,Jones
    1     ,3     ,Freddy
    1     ,4     ,Fud
    9 - Closing the cursor
    PL/SQL procedure successfully completed.
    So, what's really the point in knowing when SQL Projection occurs in a query?
    Well, we get many questions asking "How do I convert rows to columns?" (otherwise known as a pivot) or questions like "How can I get the data back from a dynamic query with different columns?"
    Let's look at a regular pivot. We would normally do something like...
    SQL> select id
      2        ,max(decode(rn,1,nm)) as nm_1
      3        ,max(decode(rn,2,nm)) as nm_2
      4  from proj_test
      5  group by id
      6  /
            ID NM_1   NM_2
             1 Fred   Bloggs
             2 Scott  Smith
             3 Jim    Jones
    (or, in 11g, use the new PIVOT statement)
    but many of these questioners don't understand it when they say their issue is that, they have an unknown number of rows and don't know how many columns it will have, and they are told that you can't do that in a single SQL statement. e.g.
    SQL> insert into proj_test (id, rn, nm) values (1,3,'Freddy');
    1 row created.
    SQL> select id
      2        ,max(decode(rn,1,nm)) as nm_1
      3        ,max(decode(rn,2,nm)) as nm_2
      4  from proj_test
      5  group by id
      6  /
            ID NM_1   NM_2
             1 Fred   Bloggs
             2 Scott  Smith
             3 Jim    Jones
    ... it's not giving us this 3rd entry as a new column and we can only get that by writing the expected columns into the query, but then what if more columns are added after that etc.
    If we look back at the steps of a cursor we see again that the description and projection of what columns are returned by a query happens before any data is fetched back.
    Because of this, it's not possible to have the query return back a number of columns that are based on the data itself, as no data has been fetched at the point the projection is required.
    So, what is the answer to getting an unknown number of columns in the output?
    1) The most obvious answer is, don't use SQL to try and pivot your data. Pivoting of data is more of a reporting requirement and most reporting tools include the ability to pivot data either as part of the initial report generation or on-the-fly at the users request. The main point about using the reporting tools is that they query the data first and then the pivoting is simply a case of manipulating the display of those results, which can be dynamically determined by the reporting tool based on what data there is.
    2) The other answer is to write dynamic SQL. Because you're not going to know the number of columns, this isn't just a simple case of building up a SQL query as a string and passing it to the EXECUTE IMMEDIATE command within PL/SQL, because you won't have a suitable structure to read the results back into as those structures must have a known number of variables for each of the columns at design time, before the data is know. As such, inside PL/SQL code, you would have to use the DBMS_SQL package, just like in the code above that showed the workings of a cursor, as the columns there are referenced by position rather than name, and you have to deal with each column seperately. What you do with each column is up to you... store them in an array/collection, process them as you get them, or whatever. They key thing though with doing this is that, just like the reporting tools, you would need to process the data first to determine what your SQL projection is, before you execute the query to fetch the data in the format you want e.g.
    create or replace procedure dyn_pivot is
      v_sql varchar2(32767);
      -- cursor to find out the maximum number of projected columns required
      -- by looking at the data
      cursor cur_proj_test is
        select distinct rn
        from   proj_test
        order by rn;
    begin
      v_sql := 'select id';
      for i in cur_proj_test
      loop
        -- dynamically add to the projection for the query
        v_sql := v_sql||',max(decode(rn,'||i.rn||',nm)) as nm_'||i.rn;
      end loop;
      v_sql := v_sql||' from proj_test group by id order by id';
      dbms_output.put_line('Dynamic SQL Statement:-'||chr(10)||v_sql||chr(10)||chr(10));
      -- call our DBMS_SQL procedure to process the query with it's dynamic projection
      process_cursor(v_sql);
    end;
    SQL> exec dyn_pivot;
    Dynamic SQL Statement:-
    select id,max(decode(rn,1,nm)) as nm_1,max(decode(rn,2,nm)) as nm_2,max(decode(rn,3,nm)) as nm_3 from proj_test group by id order by id
    1 - Opening Cursor
    2 - Parsing the query
    3 - Describing the query
    3a - SQL Projection:-
    Column Name: ID                             Datatype: Number
    Column Name: NM_1                           Datatype: Varchar2
    Column Name: NM_2                           Datatype: Varchar2
    Column Name: NM_3                           Datatype: Varchar2
    4 - Binding in values
    5 - Executing the query
    6,7 and 8 Fetching Data:-
    1     ,Fred                ,Bloggs              ,Freddy
    2     ,Scott               ,Smith               ,
    3     ,Jim                 ,Jones               ,
    9 - Closing the cursor
    PL/SQL procedure successfully completed.
    ... and if more data is added ...
    SQL> insert into proj_test (id, rn, nm) values (1,4,'Fud');
    1 row created.
    SQL> exec dyn_pivot;
    Dynamic SQL Statement:-
    select id,max(decode(rn,1,nm)) as nm_1,max(decode(rn,2,nm)) as nm_2,max(decode(rn,3,nm)) as nm_3,max(decode(rn,4,nm)) as nm_4 from proj_test group by id order by id
    1 - Opening Cursor
    2 - Parsing the query
    3 - Describing the query
    3a - SQL Projection:-
    Column Name: ID                             Datatype: Number
    Column Name: NM_1                           Datatype: Varchar2
    Column Name: NM_2                           Datatype: Varchar2
    Column Name: NM_3                           Datatype: Varchar2
    Column Name: NM_4                           Datatype: Varchar2
    4 - Binding in values
    5 - Executing the query
    6,7 and 8 Fetching Data:-
    1     ,Fred                ,Bloggs              ,Freddy              ,Fud
    2     ,Scott               ,Smith               ,                    ,
    3     ,Jim                 ,Jones               ,                    ,
    9 - Closing the cursor
    PL/SQL procedure successfully completed.
    Of course there are other methods, using dynamically generated scripts etc. (see Re: 4. How do I convert rows to columns?), but the above simply demonstrates that:-
    a) having a dynamic projection requires two passes of the data; one to dynamically generate the query and another to actually query the data,
    b) it is not a good idea in most cases as it requires code to handle the results dynamically rather than being able to simply query directly into a known structure or variables, and
    c) a simple SQL statement cannot have a dynamic projection.
    Most importantly, dynamic queries prevent validation of your queries at the time your code is compiled, so the compiler can't check that the column names are correct or the tables names, or that the actual syntax of the generated query is correct. This only happens at run-time, and depending upon the complexity of your dynamic query, some problems may only be experienced under certain conditions. In effect you are writing queries that are harder to validate and could potentially have bugs in them that would are not apparent until they get to a run time environment. Dynamic queries can also introduce the possibility of SQL injection (a potential security risk), especially if a user is supplying a string value into the query from an interface.
    To summarise:-
    The projection of an SQL statement must be known by the SQL engine before any data is fetched, so don't expect SQL to magically create columns on-the-fly based on the data it's retrieving back; and, if you find yourself thinking of using dynamic SQL to get around it, just take a step back and see if what you are trying to achieve may be better done elsewhere, such as in a reporting tool or the user interface.
    Other articles in the PL/SQL 101 series:-
    PL/SQL 101 : Understanding Ref Cursors
    PL/SQL 101 : Exception Handling

    excellent article. However there is one thing which is slightly erroneous. You don't need a type to be declared in the database to fetch the data, but you do need to declare a type;
    here is one of my unit test scripts that does just that.
    DECLARE
    PN_CARDAPPL_ID NUMBER;
    v_Return Cci_Standard.ref_cursor;
    type getcardapplattrval_recordtype
    Is record
    (cardappl_id ci_cardapplattrvalue.cardappl_ID%TYPE,
    tag ci_cardapplattrvalue.tag%TYPE,
    value ci_cardapplattrvalue.value%TYPE
    getcardapplattrvalue_record getcardapplattrval_recordtype;
    BEGIN
    PN_CARDAPPL_ID := 1; --value must be supplied
    v_Return := CCI_GETCUSTCARD.GETCARDAPPLATTRVALUE(
    PN_CARDAPPL_ID => PN_CARDAPPL_ID
    loop
    fetch v_return
    into getcardapplattrvalue_record;
    dbms_output.put_line('Cardappl_id=>'||getcardapplattrvalue_record.cardappl_id);
    dbms_output.put_line('Tag =>'||getcardapplattrvalue_record.tag);
    dbms_output.put_line('Value =>'||getcardapplattrvalue_record.value);
    exit when v_Return%NOTFOUND;
    end loop;
    END;

  • Max no of cursors opened

    Hi all,
    For our project we are using Oracle8i as back-end. I am using JDBC api to manipulate the data in the oracle database.
    I am getting an error saying that "Max no of cursors opened exceeds limit". This error am freq getting. It causes the table locking.
    Is this happening becuase of ResultSet is not closing?
    Will ResultSet automatically closed if I close the statment object in finally block of my code or do I need to close the ResultSet explicitly.
    Is there any solution for this. This am getting if no of clients are concurantly update the same table.
    Any suggestions and solutions appreciated.
    thanks in advance
    ANILA

    It's been asked here before, but I'm embarrassed to confess that I still don't know the answer:
    What if you're using a connection pool? My understanding of pools is that they create a pool of live, open connections that an application can draw from. The cost of opening connections is paid once and amortized over all the requests made.
    That makes me think that I should leave connections open.
    When I do database access with Tomcat, I set up a JNDI connection pool. I have my apps close every ResultSet and Statement, but I don't close the connections. I leave them open to be put back in the pool for the next request to use.
    Is this correct? - MOD

  • Firefox 3.6.3 fails to close completely, leaving an open instance in Task Manager.

    Firefox 3.6.3 fails to close itself, leaving an open instance in Task Manager of Windows 7 x64 each time the browser is closed. The instance needs to be closed manually in order to successfully start new browser session. This seems to happen in OEM version of Windows 77. There are no issues with a retail version of the OS. The problem started with a fresh, new install of Windows 7 with no other software installed.
    == This happened ==
    Every time Firefox opened
    == Since the fresh installation of Windows 7 x64 OEM.

    Try to use "Firefox/File > Exit" (Mac: "Firefox > Quit"; Linux: "File > Quit") to close Firefox if you are currently doing that by clicking the close X on the title bar.
    See "Hang at exit":
    *http://kb.mozillazine.org/Firefox_hangs
    See "Firefox hangs when you quit it":
    *https://support.mozilla.org/kb/Firefox+hangs

  • I need to use my iMac to run some Windows software and was thinking of using Parallels Desktop 9 to help with this. Do you still have to partition your drive with Parallels and does this leave you open to viruses?

    I need to use my iMac to run some Windows software not available for Mac and was thinking of obtaining Parrallels Desktop 9 to help with this. If I use Parrallels do you still have to partitian your drive and does this leave you open to viruses?

    You do not have to partition your drive - Parallels creates a disk image which contains your Windows installation. You do have to exercise anti-virus measures in the Windows partition, although such malware cannot affect the Mac filesystem.
    Matt

  • Problem in SQL with CURSOR( ) ,Why the CURSOR did not work?

    hi All:
    I have a problem in SQL with CURSOR.
    The data is as the attachments.
    Here is the SQL statement as follow:
    SELECT A.WADCTO,A.WADOCO,B.IGCOST,CURSOR (SELECT X.IGLITM
    FROM F3102 X
    WHERE X.IGDOCO=A.WADOCO
    AND X.IGCOST IN ('B1','D1','C3')) AS DETAIL
    FROM F4801 A INNER JOIN F3102 B ON A.WADOCO=B.IGDOCO AND A.WADCTO=B.IGDCTO AND B.IGCOST>' '
    WHERE A.WADOCO='10004'
    The statement above returns records as follow:
    WADC WADOCO IGCOST DETAIL
    WO 10004 A1 CURSOR STATEMENT : 4
    CURSOR STATEMENT : 4
    IGLITM
    1KV90CPG2
    1KV90CPG2
    1KV90CPG2
    But, after I add one statement in the subquery, there is no record returned from CURSOR.
    Here is the SQL statement:
    SELECT A.WADCTO,A.WADOCO,B.IGCOST,CURSOR (SELECT X.IGLITM
    FROM F3102 X
    WHERE X.IGDOCO=A.WADOCO
    AND X.IGCOST=B.IGCOST
    AND X.IGCOST IN ('B1','D1','C3')) AS DETAIL
    FROM F4801 A INNER JOIN F3102 B ON A.WADOCO=B.IGDOCO AND A.WADCTO=B.IGDCTO AND B.IGCOST>' '
    WHERE A.WADOCO='10004'
    The statement above returns records as follow:
    WADC WADOCO IGCOST DETAIL
    WO 10004 A1 CURSOR STATEMENT : 4
    CURSOR STATEMENT : 4
    no rows selected
    Why the CURSOR did not work?
    The database version is Oracle Database 10g Release 10.2.0.4.0 - 64bit Production.
    F3102 DATA:
    IGDOCO     IGDCTO     IGLITM     IGCOST
    10004     WO     1KV90CPG2      A1
    10004     WO     1KV90CPG2      B1
    10004     WO     1KV90CPG2      C3
    10004     WO     1KV90CPG2      D1
    F4801 DATA:
    WADCTO     WADOCO
    WO     10004
    Edited by: user2319139 on 2010/3/2 上午 1:17
    Edited by: user2319139 on 2010/3/2 上午 1:20

    Why this structure and not a join?
    The cursor() function returns a cursor handle that needs to be processed - in other words, the client needs to fetch data from it. The Oracle® Database SQL Reference+ (http://download.oracle.com/docs/cd/B19306_01/server.102/b14200/expressions005.htm#i1035107) describes it as being equivalent to a ref cursor handle.
    Thus why are you creating ref cursor handles as a column in a SQL projection - where each row will have a "+nested+" ref cursor handle to process. What problem are you attempting to hack solve this way?

  • JDBC Sender Adapter : java.sql.SQLException: Cursor state not valid.

    Hello all,
    We have configured JDBC Sender Adapter which fetches around 10K records with poll interval 1hr  from DB2 System .
    It was working fine,suddenly it started throwing an exception in Adapter Monitoring :
    Error during conversion of query result to XML: java.sql.SQLException: Cursor state not valid.
    It is not fetching any records.
    Without changing any configurations when we tried to fetch to around 1000 records it's working fine.
    For 10K records same exception persists
    What could be the reason ?How to resolve this issue?
    regards
    GangaPrasad

    Hello Christophe ,
    Trace in VA :::
    Date : 05/09/2008
    Time : 11:45:57:750
    Message : Unexpected error converting database resultset to XML, reason: java.sql.SQLException: Cursor state not valid.
         at java.lang.Throwable.<init>(Throwable.java:194)
         at java.lang.Exception.<init>(Exception.java:41)
         at java.sql.SQLException.<init>(SQLException.java:40)
         at com.ibm.as400.access.JDError.throwSQLException(JDError.java:389)
         at com.ibm.as400.access.JDError.throwSQLException(JDError.java:366)
         at com.ibm.as400.access.AS400JDBCResultSet.getValue(AS400JDBCResultSet.java:3580)
         at com.ibm.as400.access.AS400JDBCResultSet.getString(AS400JDBCResultSet.java:3223)
         at sun.reflect.GeneratedMethodAccessor459222074.invoke(Unknown Source)
         at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
         at java.lang.reflect.Method.invoke(Method.java:309)
         at com.sap.aii.adapter.jdbc.sql.jdbctrace.TraceInvocationHandler.invoke(TraceInvocationHandler.java:45)
         at com.sap.aii.adapter.jdbc.sql.jdbctrace.$Proxy254.getString(Unknown Source)
         at com.sap.aii.adapter.jdbc.JDBC2XI.convert2XML(JDBC2XI.java:954)
         at com.sap.aii.adapter.jdbc.JDBC2XI.invoke(JDBC2XI.java:492)
         at com.sap.aii.af.service.scheduler.JobBroker$Worker.run(JobBroker.java:475)
         at com.sap.engine.core.thread.impl3.ActionObject.run(ActionObject.java:37)
         at com.sap.engine.core.thread.impl3.SingleThread.execute(SingleThread.java:99)
         at com.sap.engine.core.thread.impl3.SingleThread.run(SingleThread.java:119)
    Severity : Error
    Category : /Applications/ExchangeInfrastructure/AdapterFramework/Services/ADAPTER/ADMIN/JDBC
    Location : com.sap.aii.adapter.jdbc.JDBC2XI.convert2XML(ResultSet, ResultSetMetaData)
    Application :
    Thread : XI JDBC2XI[JDBC_SND_DB2_VehicleReceiving/DB2PRD00/]_170
    Datasource : 12428950:/usr/sap/PXI/DVEBMGS01/j2ee/cluster/server0/log/applications/com.sap.xi/xi.log
    Message ID : 00145E742794005E0014980B000000BE00044CC763766C4F
    Source Name : /Applications/ExchangeInfrastructure/AdapterFramework/Services/ADAPTER/ADMIN/JDBC
    Argument Objs : java.sql.SQLException: Cursor state not valid.
         at java.lang.Throwable.<init>(Throwable.java:194)
         at java.lang.Exception.<init>(Exception.java:41)
         at java.sql.SQLException.<init>(SQLException.java:40)
         at com.ibm.as400.access.JDError.throwSQLException(JDError.java:389)
         at com.ibm.as400.access.JDError.throwSQLException(JDError.java:366)
         at com.ibm.as400.access.AS400JDBCResultSet.getValue(AS400JDBCResultSet.java:3580)
         at com.ibm.as400.access.AS400JDBCResultSet.getString(AS400JDBCResultSet.java:3223)
         at sun.reflect.GeneratedMethodAccessor459222074.invoke(Unknown Source)
         at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
         at java.lang.reflect.Method.invoke(Method.java:309)
         at com.sap.aii.adapter.jdbc.sql.jdbctrace.TraceInvocationHandler.invoke(TraceInvocationHandler.java:45)
         at com.sap.aii.adapter.jdbc.sql.jdbctrace.$Proxy254.getString(Unknown Source)
         at com.sap.aii.adapter.jdbc.JDBC2XI.convert2XML(JDBC2XI.java:954)
         at com.sap.aii.adapter.jdbc.JDBC2XI.invoke(JDBC2XI.java:492)
         at com.sap.aii.af.service.scheduler.JobBroker$Worker.run(JobBroker.java:475)
         at com.sap.engine.core.thread.impl3.ActionObject.run(ActionObject.java:37)
         at com.sap.engine.core.thread.impl3.SingleThread.execute(SingleThread.java:99)
         at com.sap.engine.core.thread.impl3.SingleThread.run(SingleThread.java:119)
    Arguments : java.sql.SQLException: Cursor state not valid.
         at java.lang.Throwable.<init>(Throwable.java:194)
         at java.lang.Exception.<init>(Exception.java:41)
         at java.sql.SQLException.<init>(SQLException.java:40)
         at com.ibm.as400.access.JDError.throwSQLException(JDError.java:389)
         at com.ibm.as400.access.JDError.throwSQLException(JDError.java:366)
         at com.ibm.as400.access.AS400JDBCResultSet.getValue(AS400JDBCResultSet.java:3580)
         at com.ibm.as400.access.AS400JDBCResultSet.getString(AS400JDBCResultSet.java:3223)
         at sun.reflect.GeneratedMethodAccessor459222074.invoke(Unknown Source)
         at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
         at java.lang.reflect.Method.invoke(Method.java:309)
         at com.sap.aii.adapter.jdbc.sql.jdbctrace.TraceInvocationHandler.invoke(TraceInvocationHandler.java:45)
         at com.sap.aii.adapter.jdbc.sql.jdbctrace.$Proxy254.getString(Unknown Source)
         at com.sap.aii.adapter.jdbc.JDBC2XI.convert2XML(JDBC2XI.java:954)
         at com.sap.aii.adapter.jdbc.JDBC2XI.invoke(JDBC2XI.java:492)
         at com.sap.aii.af.service.scheduler.JobBroker$Worker.run(JobBroker.java:475)
         at com.sap.engine.core.thread.impl3.ActionObject.run(ActionObject.java:37)
         at com.sap.engine.core.thread.impl3.SingleThread.execute(SingleThread.java:99)
         at com.sap.engine.core.thread.impl3.SingleThread.run(SingleThread.java:119)
    Dsr Component :
    Dsr Transaction : d1f629d01d9b11dd984200145e742794
    Dsr User :
    Indent : 0
    Level : 0
    Message Code :
    Message Type : 1
    Relatives : com.sap.aii.adapter.jdbc.JDBC2XI
    Resource Bundlename :
    Session : 0
    Source : /Applications/ExchangeInfrastructure/AdapterFramework/Services/ADAPTER/ADMIN/JDBC
    ThreadObject : XI JDBC2XI[JDBC_SND_DB2_VehicleReceiving/DB2PRD00/]_170
    Transaction : SAP J2EE Engine JTA Transaction : [0ffffffbdffffffa6ffffff960086]
    User : J2EE_GUEST
    Regards
    Ganga Prasad

  • Calling PL/SQL Functions And Open Oracle Reports From ADF Application

    Hi all,
    My company will convert some projects from Oracle forms to Oracle ADF so, we need to call the PL/SQL functions and open the Oracle Reports (which are already exist) from ADF Application.
    Thank You..
    Jack.N

    Hi Jack.N,
    calling PL/SQL Functions -----> http://sameh-nassar.blogspot.com/2010/01/create-plsql-function-and-call-it-from.html
    Open Oracle Reports ---------> http://radio-weblogs.com/0137094/2008/06/15.html
    You will find The Integration between ADF and other systems in ---> http://wiki.oracle.com/page/ADF+Integration
    Sameh Nassar

  • The method of leaving cursor at selecting item of list box.

    Hello.
    Pleas let me ask about the subject!!!
    Concerning the screen by web-dynpro, I have a problem that when I select one listbox after selecting another listbox, the screen moves up to the top automatically.
    I would like to prevent from above moving.
    Could anyone specialist please tell me how leaving cursor at setelcting item of the list box.
    Thanks!!!

    Hi...
    there are two events which have been used, one is doubleclick event and the other one is on selecting the item from the list and clicking on OK button(this will be the most frequently used function, i cannot use event target event for this OK button... ) . I have attached the screen shot. Please have a look at it and let me know how can i achieve that...
    I can use custom event, but the main problem is that the inline itemeditor's details are not accessible in the code.... I can access some function from within the inline itemeditor combo box using outerDocument.myFunction() (this is something like GET). Is there a similar way, to SET the data into this itemeditor?

  • Method for leave cursor from cell

    Hi Experts,
    I need to implement action on leave cursor from cell .
    here If after enter data for one cell then relevant data populated for other cells .
    please suggest the solution without using button or llink.
    Regards,
    BBC

    Hi,
        To populate data in a cell depending on data entered in another cell, there must be some kind of user
         action like button clicks or press Enter. Without any action we cannot populate relevant data in the cell.
        And WDA does not have any events like leave cursor So we need some kind of action,Else its
        not possible.,

  • I have to turn off Visualization in ZoneAlarm Extreme in order to use Firefox v10.0.2....leaving me open to silent drive-by Web attacks reaching my computer

    XULRunner Error: Platform v 9.0.1 not compatible with
    miniVersion > = 10.0.2
    maxVersion < = 0.0.2
    I have to turn off Visualization in ZoneAlarm Extreme in order to use Firefox v10.0.2....leaving me open to silent drive-by Web attacks reaching my computer

    That would at least partially explain it.
    These MacBook Pros drew more power than the power brick could readily supply, and so would only run at top speed when the power brick was supplemented by the battery.
    Though the applicable tech note has been removed, it stated:
    "If the battery is removed from a MacBook or MacBook Pro, the computer will automatically reduce the processor speed. This prevents the computer from shutting down if it demands more power than the A/C adapter alone can provide."

  • Leaving applications open when not in use

    This may be the world's dumbest computer question but what effect does it have on the OS to leave applications open on the dock when not in use? Any? Apps such as, e.g., Office 2008? Does it slow the OS to have apps open when not in use? Or perhaps no effect unless using them? Does it matter if Safari is left open after logging off a secure site?
    I've been compulsive about closing what's not in use but I just installed Office 2008 and Word and Excel, for example, are slow to open so I'd like to just always leave them open on the dock.
    Sorry if this is just too dumb. I searched but didn't find anyone else who had asked. Maybe everyone else knows.

    Active Memory: 987.37 MB
    Free Memory: 388.07 MB
    Wired Memory: 253.62 MB
    Used Memory: 1.62 GB
    Inactive Memory: 418.75 MB
    Total VM: 50.97 GB
    Number of processes: 79
    ID Process Name User CPU RSIZE VSIZE
    0 kernel_task root 2.7 200.78 MB 1.24 GB
    1 launchd root 0.0 596.00 KB 586.72 MB
    10 kextd root 0.0 1.29 MB 586.16 MB
    11 DirectoryService root 0.0 3.69 MB 589.31 MB
    12 notifyd root 0.0 604.00 KB 586.15 MB
    13 syslogd root 0.0 1.12 MB 587.64 MB
    14 configd root 0.8 2.00 MB 587.24 MB
    16 distnoted daemon 0.0 844.00 KB 585.56 MB
    17 mDNSResponder _mdnsrespo 0.0 1.36 MB 587.48 MB
    23 securityd root 0.0 2.39 MB 589.34 MB
    27 ntpd root 0.0 884.00 KB 586.11 MB
    28 cupsd root 0.0 1.51 MB 586.84 MB
    29 cron root 0.0 660.00 KB 586.66 MB
    30 update root 0.0 296.00 KB 585.54 MB
    31 SystemStarter root 0.0 688.00 KB 585.58 MB
    35 mds root 0.6 39.32 MB 788.62 MB
    36 loginwindow jandonnast 0.0 9.21 MB 774.46 MB
    37 KernelEventAgent root 0.0 664.00 KB 585.65 MB
    38 kdcmond root 0.0 996.00 KB 585.70 MB
    41 hidd root 0.0 608.00 KB 586.07 MB
    42 fseventsd root 0.2 1.82 MB 592.33 MB
    44 dynamic_pager root 0.0 708.00 KB 585.58 MB
    46 diskarbitrationd root 0.0 1.43 MB 585.67 MB
    50 autofsd root 0.0 680.00 KB 585.59 MB
    51 socketfilterfw root 0.0 1.56 MB 585.91 MB
    57 krb5kdc root 0.0 1.39 MB 586.03 MB
    58 coreservicesd root 0.0 36.82 MB 628.69 MB
    59 WindowServer _windowser 2.5 76.48 MB 887.56 MB
    61 blued root 0.0 2.61 MB 596.56 MB
    106 launchd jandonnast 0.0 576.00 KB 585.72 MB
    120 hpusbmond root 0.0 780.00 KB 586.78 MB
    128 HPIO Trap Monito root 0.3 1.63 MB 590.09 MB
    130 hpdot4d root 0.4 684.00 KB 588.45 MB
    133 nmbd root 0.0 1.21 MB 586.95 MB
    136 InternetSharing root 0.0 832.00 KB 586.04 MB
    137 bootpd root 0.0 988.00 KB 585.69 MB
    138 named root 0.0 4.89 MB 589.91 MB
    150 AirPort Base Station Agen jandonnast 0.0 3.87 MB 717.38 MB
    154 Spotlight jandonnast 0.0 11.09 MB 831.79 MB
    155 UserEventAgent jandonnast 0.0 2.04 MB 589.72 MB
    157 ATSServer jandonnast 0.0 10.23 MB 648.36 MB
    158 pboard jandonnast 0.0 592.00 KB 586.60 MB
    159 coreaudiod root 0.0 3.91 MB 591.96 MB
    160 SystemUIServer jandonnast 0.0 11.88 MB 743.37 MB
    162 Finder jandonnast 0.4 53.75 MB 828.07 MB
    167 HP IO Classic Proxy jandonnast 0.0 2.46 MB 657.68 MB
    168 HP Scheduler jandonnast 0.0 3.76 MB 685.18 MB
    169 HP AiO Notifications jandonnast 0.2 3.23 MB 677.94 MB
    171 HP Event Handler jandonnast 0.2 3.48 MB 660.33 MB
    176 Palm Desktop Background jandonnast 0.0 4.45 MB 721.80 MB
    181 Transport Monitor jandonnast 0.0 3.64 MB 659.34 MB
    183 Logitech Control Center D jandonnast 0.0 6.17 MB 720.07 MB
    227 AppleSpell.service jandonnast 0.0 5.13 MB 601.66 MB
    246 smbd root 0.0 2.15 MB 590.67 MB
    247 smbd root 0.0 332.00 KB 590.67 MB
    23176 RealPlayer Downloader Age jandonnast 1.5 3.30 MB 684.38 MB
    23177 RPDLAgentHelperD root 0.1 12.94 MB 599.34 MB
    32757 HP Rules Processor jandonnast 0.0 2.01 MB 656.36 MB
    35385 mdworker nobody 0.0 2.37 MB 599.77 MB
    35387 Mail jandonnast 0.3 55.34 MB 812.88 MB
    39355 Microsoft Word jandonnast 0.3 157.98 MB 955.50 MB
    39356 Microsoft Database Daemon jandonnast 0.0 8.85 MB 726.32 MB
    39358 Microsoft AU Daemon jandonnast 0.0 2.37 MB 672.68 MB
    39363 Microsoft Excel jandonnast 0.1 102.52 MB 910.05 MB
    40504 setiathome6.03 boinc_proj 13.9 37.45 MB 635.11 MB
    40885 Safari jandonnast 0.0 55.18 MB 784.16 MB
    40914 SyncServer jandonnast 0.0 23.46 MB 615.11 MB
    41014 mdworker jandonnast 0.0 7.49 MB 606.30 MB
    41091 ocspd root 0.0 1.09 MB 585.88 MB
    41178 Activity Monitor jandonnast 31.4 10.00 MB 769.53 MB
    41179 pmTool root 22.0 1.36 MB 595.65 MB
    76340 Dock jandonnast 0.0 18.34 MB 778.05 MB
    77461 updateSharingD updatesh 0.0 304.00 KB 577.55 MB
    79106 BOINC jandonnast 0.5 11.88 MB 744.59 MB
    79108 boinc boinc_mast 0.0 2.52 MB 587.57 MB
    79793 DashboardClient jandonnast 0.0 32.48 MB 826.73 MB
    79794 DashboardClient jandonnast 0.0 23.57 MB 748.25 MB
    79795 DashboardClient jandonnast 0.0 12.27 MB 727.93 MB
    99653 iCal jandonnast 0.0 24.74 MB 746.82 MB

Maybe you are looking for

  • How do I set iCal default alterts

    Is it possible to set alerts so they default to none in iCal?

  • IWeb adds "extra" directory in some file paths

    I'm helping a client create a podcast using iWeb. For the record, I have created several functional podcast sites using WordPress, so I'm not a novice. The podcast page is here: http://hauntingofcambria.com/Podcast/Podcast.html You can see that the p

  • Horizontal Spry Menu displays incorrectly in Explorer

    I looked in other discussions to find an answer to this, but I can't find the right answer. My issue is that my Horizontal Spry Menu Bar, which displays correctly in Firefox and Chrome, displays vertically and on the left side of the page in Explorer

  • Do you import both raw and jpg...

    Sorry if this has been asked. I did a search to no avail. I am shooting RAW+JPG w/ my camera but and have now set the preference to import the JPG file next to the raw file. My question is more on how you do your work flow... Do you import both (if y

  • How to split one big master clip into many?

    Hi, This is probably a simple question for you pros. Thank you for reading. I have film that I've telecined onto a DV. However, FCP imported a one hour tape as one big master clip. Is there a way I can split this master clip into several small clips