VO Returning no rows after setWhereClause

I have a VO that I'm setting the where clause for. When I execute vo.executeQuery(); the first time, it returns no data. If I execute it a 2nd time, it returns data as expected. I've reviewed my where clause, and have run it outside of Jdev in SQL Plus, and it returns rows. Does anybody have any idea why it would return no data the first time yet work on subsequent executions? Code below:
mnVo.setWhereClause("myPk = "+Variables.getCurrentmyPK()+" and relationship = 'SELF'");
mnVo.executeQuery();
if (mnVo.getFetchedRowCount() > 0)
Number Hold = (Number)mnVo.first().getAttribute("queryOutput");
System.out.println("queryOutput="+Hold);
Variables.setQueryOutput(Hold.intValue());
else
throw new java.lang.AssertionError("Query returned no rows");
}

I would be careful with mnVo.getRowCount() because if i remeber correctly this would lead to a select count(*) from ... which could be really time consuming if your resultset is real large or your query is "expensive".
Why not if(mnVo.first() == null)
  throw new oracle.jbo.JboException("Query returned no rows");HTH, Markus

Similar Messages

  • Query executed within a plug-in script returns 0 rows, although data exists

    I created a plug-in script for algorithm entity: Service Quantity Rule.
    The script calls a business service that I created using query zones. The query returns the values of the bill segment (ci.bseg.bseg_id and ci_bseg.closing_bseg_sw) that is created while running a bill manually. The zone receives the bseg_id as a parameter.
    The problem is that when I execute the business service within the plug-in script the business services returns 0 rows even though the data is actually being stored in the database.
    The script calculates some SQI values and saves it to the bill segment based on a response that is received from MDM (I'm using the usage request object).
    Steps:
    1.- Create Bill. The bill segment is created in error as it is waiting for the bill determinants to be sent from the MDM. If I test the zone with the bseg_id (as a parameter) of the newly created bill segment it works fine.
    2.- We send a message from the MDM to CC&B. The message is received and processed and it gets to a point when the usage updates the bill segment.
    3.- After the bill segment has been updated with the values from the usage request object it starts executing the plug-in script.
    4.- I obtain the bseg_id from the usage request and use the business service (passing the bseg_id as a parameter) and it returns no result.
    5.- The process finishes and if test the zone with the bseg_id (as a paramter) of the billing segment it works fine.
    So apparently during the execution of the script after the billing determinants are received from MDM I can't have access to the Bill segment that was created, even if the physically the record exists in the database (CI_BSEG).
    I also tried instantiating an object related with the bill segment and got the same result.
    Any idea or clue of what is happening?

    Could you be more explicit.
    What CC&B version?
    What MDM version?
    More details are required for:
    2.- We send a message from the MDM to CC&B. The message is received and processed and it gets to a point when the usage updates the bill segment.
    3.- After the bill segment has been updated with the values from the usage request object it starts executing the plug-in script.
    4.- I obtain the bseg_id from the usage request and use the business service (passing the bseg_id as a parameter) and it returns no result.

  • Bug Report: ResultSet.isLast() returns false when queries return zero rows

    When calling the method isLast() on a resultset that contains zero (0) rows, false is returned. If a resultset contains no rows, isLast() should return true because returning false would indicate that there are more rows to be retrieved.
    Try the following Java source:
    import java.io.*;
    import java.sql.*;
    import java.util.*;
    import oracle.jdbc.driver.*;
    public class Test2 {
    public static void main (String [] args) throws Exception {
    Connection conn = null;
    String jdbcURL = "jdbc:oracle:thin:@" +
    "(DESCRIPTION=(ADDRESS=(HOST=<host computer>)"+
    "(PROTOCOL=tcp)(PORT=<DB port number>))"+
    "(CONNECT_DATA=(SID=<Oracle DB instance>)))";
    String userId = "userid";
    String password = "password";
    try{
    // Load the Oracle JDBC Driver and register it.
    DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver());
    // *** The following statement creates a database connection object
    // using the DriverManager.getConnection method. The first parameter is
    // the database URL which is constructed based on the connection parameters
    // specified in ConnectionParams.java.
    // The URL syntax is as follows:
    // "jdbc:oracle:<driver>:@<db connection string>"
    // <driver>, can be 'thin' or 'oci8'
    // <db connect string>, is a Net8 name-value, denoting the TNSNAMES entry
    conn = DriverManager.getConnection(jdbcURL, userId, password);
    } catch(SQLException ex){ //Trap SQL errors
    // catch error
    //conn = new OracleDriver().defaultConnection(); // Connect to Oracle 8i (8.1.7), use Oracle thin client.
    PreparedStatement ps = conn.prepareStatement("select 'a' from dual where ? = ?", ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY); // Use any query that will return zero rows.
    ps.setInt(1, 1); // Set the params so that the query returns 0 rows.
    ps.setInt(2, 2);
    ResultSet rs = ps.executeQuery();
    System.out.println("1. Last here? " + rs.isLast());
    while (rs.next()) {
    // do whatever
    System.out.println("2. Last here? " + rs.isLast());
    ps.close();
    rs.close();
    EXPECTED RESULT -
    1. Last here? true
    2. Last here? true
    ACTUAL RESULT -
    1. Last here? false
    2. Last here? false
    This happens to me on Oracle 9.2.0.1.0.

    387561,
    For your information, I discovered this problem from
    running a query that did access an actual DB table.
    Try it and let me know.I did say I was only guessing, and yes, I did try it (after I posted my reply, and before I read yours). And I did check the query plan for the queries I tried -- to verify that they were actually doing some database "gets".
    In any case, the usual way that I determine whether a "ResultSet" is empty is when the very first invocation of method "next()" returns 'false'. Is that not sufficient for you?
    Good Luck,
    Avi.

  • ExecuteWithParams is not returning the rows from cache

    Hi,
    We have two VO's based on same entity ,whenever new row is inserted in one VO and we do executeWithParams on another VO ,It is not returning the rows which are uncommitted.
    I replaced the executeWithParams with a custom method in AM in which I am executing the query after applying the view criteria and setting query mode.Its returning rows which are uncommitted.
    Jdev Version which I am using is 11.1.1.7.0
    ExecuteWithParams used to work with uncommitted data in 11.1.1.6.0 .
    Do we need to raise a bug on framework or Am I missing something?
    Edited by: sharavnkumar_malla on Oct 18, 2012 1:02 AM

    Still the same answer, even after you updated the question. We (the public) don't have 11.1.1.7, know nothing about 11.1.1.7, and cannot help you with 11.1.1.7. Questions about internal builds belong on internal forums.

  • ERROR: ORA-19025: EXTRACTVALUE returns... after a deleteXML command.

    Hi
    My Oracle details are:
    Oracle Database 11g Release 11.2.0.2.0 - 64bit Production
    PL/SQL Release 11.2.0.2.0 - Production
    CORE 11.2.0.2.0 Production
    TNS for Solaris: Version 11.2.0.2.0 - Production
    NLSRTL Version 11.2.0.2.0 - Production
    I'm getting the following error:
    ERROR:
    ORA-19025: EXTRACTVALUE returns value of only one node
    when I try and select the content of a row after I have performed an deleteXML command on a node from with in the xml content.
    This process can reproduced the error.
    CREATE TABLE test OF XMLType xmltype STORE as BINARY XML;
    INSERT INTO test VALUES (XmlType('<product_details id="1"><product id="21"><name>test1</name><code>123</code></product><product id="20"><name>test2</name><code>456</code></product></product_details>'));Select the xml content...
    SELECT extract(OBJECT_VALUE, '/product_details[@id=1]') "Xml" FROM test WHERE XMLEXISTS('/product_details[@id=1]' PASSING OBJECT_VALUE);
    <product_details id="1">
      <product id="21">
        <name>test1</name>
        <code>123</code>
      </product>
      <product id="20">
        <name>test2</name>
        <code>456</code>
      </product>
    </product_details>then delete the product node with id = 21 from the xml content...
    UPDATE test SET OBJECT_VALUE = deleteXML(OBJECT_VALUE, '/product_details[@id=1]/product[@id=21]')  WHERE XMLEXISTS('/product_details[@id=1]' PASSING OBJECT_VALUE);
    1 row updated.The same select now produces the following error:
    SELECT extract(OBJECT_VALUE, '/product_details[@id=1]') "Xml" FROM test WHERE XMLEXISTS('/product_details[@id=1]' PASSING OBJECT_VALUE);
    ERROR:
    ORA-19025: EXTRACTVALUE returns value of only one node
    no rows selectedThe current content of the test table is:
    SELECT * FROM test;
    <product_details id="1">
      <product id="20">
        <name>test2</name>
        <code>456</code>
      </product>
    </product_details>I would now expect the select statement:
    SELECT extract(OBJECT_VALUE, '/product_details[@id=1]') "Xml" FROM test WHERE XMLEXISTS('/product_details[@id=1]' PASSING OBJECT_VALUE);
    to return:
    <product_details id="1">
      <product id="20">
        <name>test2</name>
        <code>456</code>
      </product>
    </product_details>Can anyone tell me why this select is not returning any rows and an error message?
    Having done some more research around this problem, it would seem that deleting the last node first ie the node with the product id of 20 does not cause the error!
    eg running the following deleteXML works as I would expect:
    UPDATE test SET OBJECT_VALUE = deleteXML(OBJECT_VALUE, '/product_details[@id=1]/product[@id=20]')  WHERE XMLEXISTS('/product_details[@id=1]' PASSING OBJECT_VALUE);
    1 row updated.then running...
    SELECT extract(OBJECT_VALUE, '/product_details[@id=1]') "Xml" FROM test WHERE XMLEXISTS('/product_details[@id=1]' PASSING OBJECT_VALUE);
    <product_details id="1">
      <product id="21">
        <name>test1</name>
        <code>123</code>
      </product>
    </product_details>returns what I would expect.
    Many thanks
    Edited by: Baseman on 20-Apr-2011 16:55
    Edited by: Baseman on 20-Apr-2011 17:00

    I tried it myself and found something very strange. It seems when using xmltype with binary storage, that oracle isnt able to read xmldata, the same way that it reads using clob storage.
    Here is what I get if I use clob storage:
    CREATE TABLE test_clob OF XMLType xmltype STORE as CLOB;
    INSERT INTO test_clob VALUES (XmlType('<product_details id="1"><product id="21"><name>test1</name><code>123</code></product><product id="20"><name>test2</name><code>456</code></product></product_details>'));
    UPDATE test_clob SET OBJECT_VALUE = deleteXML(OBJECT_VALUE, '/product_details[@id=1]/product[@id=21]') 
    WHERE XMLEXISTS('/product_details[@id=1]' PASSING OBJECT_VALUE);
    SELECT extract(OBJECT_VALUE, '/product_details[@id=1]') "Xml"
    FROM test_clob WHERE XMLEXISTS('/product_details[@id=1]' PASSING OBJECT_VALUE);
    -- works fine and prints out:
    <product_details id="1"><product id="20"><name>test2</name><code>456</code></product></product_details>
    SELECT t.*, x.*
    ,extract(value(x), '/product_details/@id') id
    FROM test_clob t, table (xmlsequence(extract(t.object_value,'/product_details'))) xThe last select statement prints out the "id" as "1" which we expected.
    But if I use the same select statement in your example on a table test like this:
    SELECT t.*, x.column_value
    ,extract(value(x), '/product_details/@id') id
    FROM test t, table (xmlsequence(extract(t.object_value,'/product_details'))) xit prints out:
    120
    <name>test2</name>
    <code>456</code>It seem it printed out the "id" from product_details, plus "id" from "product" plus all the data of the element product.
    Edited by: Romci on 3.5.2011 13:16

  • Crystal Reports return no data after publish to Infoview.

    *Description of Problem or Question:
    Reports defined in Crystal report client do not work correctly when published to Infoview.
    When report run from client, correct data is returned. When run from Infoview, no or limited data is returned.
    The problem is new since installation of Service Pack 3 fixpack 3.5.
    We are using the SAP Integration kit.
    Product\Version\Service Pack\Fixpack (if applicable):
    BOBJ XI 3.1 SP3, FP 3.5 (Including Integration kit transports)
    Relevant Environment Information (OS & version, java or .net & version, DB & version):
    Windows 2003 64-Bit, Java, Linking to SAP ECC6 on MAXDB 7.6
    Sporadic or Consistent (if applicable):
    Consistent, altough 1st refresh returns data, subsequent refresh returns no rows or few rows.
    What has already been tried (where have you searched for a solution to your question/problem):
    We have searched SAP Marketplace for OSS notes but none match our problem.
    Steps to Reproduce (if applicable):
    Create report in Crystal Reports - publish to Infoview
    Install BOBJ XI 3.1 SP3 and FP 3.5
    Refresh report in infoview - shows limited or no data
    Open report in Crystal Reports 2008 Client, refresh data - returns correct data.
    Save Cystal report to Infoview, refresh data in infoview (scheduled or online) - returns incorrect or no data.

    Hello,
    this is interesting. Check your CR Server settings if there are any limits with regards to rows or timeouts after the installation of FP3.5
    If your CR reports are running on a Universe, check the properties of the Universe if there are limitations affected to the rows.
    If this all brings no result i would highly recommend to open a Support Message at SAP - maybe thats a Bug coming with FP3.5
    Regards
    -Seb.

  • 11g DBAdatper returns 1st row multiple times

    We have a db adapter that was built using the adapters-db-102-select pdf as a guideline. When we test the query being executed by the adapter in the database it returns ten rows. When we test the BPEL process from the soa-infra console with debugging turned on and view the audit trail we see the following discrepancy. After the invoke operation I view the payload and see that the returned collection does in fact contain ten elements. The issue is that instead of returning the same ten rows as when we execute the query in the database it returns only the first row ten times. Can anyone suggest a possible resolution?
    Thank you.

    Ryan -
    I've always had to work to get a row repeated ten times, e.g. iterating through with a while loop and not putting the loop variable as a subscript in the assignment. You may have found a labor-saving new feature! :-( Being suspicious of new releases, I would try interating through the output variable, to see if maybe the person who coded the console display made that "not putting the loop variable as a subscript" error. If you confirm that you really do have the first row ten times, then you have two possibilities: (1) even though you think it's the same, the SQL you defined in the BPEL DB adapter wizard is not exactly the same as what you ran in the database, OR (2) the SQL in BPEL is right but returns repeated rows ("undocumented feature").
    If you aren't positive the DB adapter SQL is perfect, you might post the SQL you ran in the DEB and the SQL from the Toplink mappings (assuming 11G still has those). In 10.1.3 it would be in the JDeveloper BPEL project directory {JDevProjectName}/toplink/{DbAdapterPartnerlinkName}/descriptor, in the file named {DbAdapterPartnerlinkName}.{TableName}.ClassDescriptor.xml, in the XML element (tag) called query. It may be in a different place in 11G, but you get the idea. Compare what you think you coded with what the BPEL designer actually coded.
    If you're sure the SQL is right, you may want to open an SR. They'll probably ask for the SQL anyway, so posting it first won't hurt unless you're in a hurry.
    Good luck, Andy

  • Display text (returned by function) after tabelar forom submit...

    Hi guys...
    Is there any possibility to display text returned by function after tabular form submit?
    If yes please tell me how :)
    With regards,
    PsmakR

    The value of the selected row's Display column ("Choice B", for example) is not stored in the field -- only the value of the selected row's Value column ("2") is. With the DDLB's item list loaded the form is able to translate "2" (Value) to "Choice B" (Display) so you see "Choice B". With the DDLB's item list empty there is no way to translate "2" to "Choice B" so you see "2".
    If you do not want to save the DDLB's item list with the form you would need to preserve the selected row's Display column in another, possibly hidden, field then use that to display the translated Value.

  • Select for update that doesn't return any rows

    Are there any odd side-effects that may occur if a select for update that returns no results is never committed? I wouldn't think there are, but I'm not sure if there would be some kind of overhead or unforeseen consequences. This isn't a terribly important question, but it's come up in some coding I've done and I've not been able to find any documentation addressing it.

    A select for update only locks rows that meet the predicate specified in the where clause. So, if the query returns no rows, no rows are locked.
    session1> SELECT * FROM t;
            ID DESCR
             1 Un
             5 One
             2 THIS IS WA
    session1> SELECT * FROM t
      2  WHERE id = 11 FOR UPDATE;
    no rows selectedA second session can update rows in the table
    session2> UPDATE t
      2  SET descr = 'One'
      3  WHERE id = 1;
    1 row updated.John
    Edited by: John Spencer on Jan 7, 2009 1:36 PM
    I just realized that, although you can do updates on the table after the select fo update that returns no rows, you cannot do DDL operations liike a truncate. Unless the session that does the select for update either ends the transaction (i.e. commit or rollback) or ends the session DDL operations will fail.

  • Custom database functoid to return multiple rows from database

    Hi,
    I have created a custom database fucntoid to execute a stored procedure which returns just single row from the database.But I could not manage to return multiple rows from the database.
    Does anyone know how to return multiple rows from DB and create a node with that many occurrences in the target schema?
    Thanks
    JB

    If you want to do this in messaging-only way without orchestration, then only option let to you is using .NET in BizTalk:
    We had similar requirement with one of our clients, where they didn’t want to use orchestration (though we emphasised on less impact orch would have compared to manageability),
    they still wanted to have pure-messaging only.
    We extended the custom XslTransform component that ships with BizTalk SDK (<BizTalk installation directory>\SDK\Samples\Pipelines\XslTransformComponent)).
    Created a custom disassembler pipeline component, used the XslTransform component from SDK to execute the map’s XSLT. Here we created a map with every links except the database ones. After executing the map, access the database, execute the store procedure
    which returns more than one row/dataset, enrich the XSLT transformed message with the dataset from your database in disassembler.
    Since .NET gives you the flexibility of access the dataset with more than one row, you can enrich the message in custom pipeline code.
    Other option is code the message transformation completely in .NET code in custom disassembler by passing the received message to method/code which would code the map/enrichment.
    While enriching you can execute the store procedure which returns more than one row/dataset, enrich the message further with the dataset from db.
    If this answers your question please mark it accordingly. If this post is helpful, please vote as helpful by clicking the upward arrow mark next to my reply.

  • How to return mismatched rows from two tables?

    I have created two tables in the same database as below which gives the row
    count of tables across all databases before and after an DB restore
    operation.
    create table before_restore(db_name varchar(100),table_name
    varchar(1000),row_count int) insert into before_restore exec sp_msforeachdb 'USE
    [?]; select ''?'' as database_name,o.name,max(i.rowcnt ) From [?].sys.objects o
    inner join [?].sys.sysindexes i on o.object_id=i.id where o.type=''U'' group by
    o.name'
    create table after_restore(db_name varchar(100),table_name
    varchar(1000),row_count int) insert into after_restore exec sp_msforeachdb 'USE
    [?]; select ''?'' as database_name,o.name,max(i.rowcnt ) From [?].sys.objects o
    inner join [?].sys.sysindexes i on o.object_id=i.id where o.type=''U'' group by
    o.name'
    I want to compare these two tables and it should only return me rows that
    have changed after the restore operation is complete.
    Eg:
    Table xyz has rowcount of 100 before restore and the restore was not proper
    and after restore count is 50. So it should return me the result set as
    below;
    Db_name    Table_Name  row_count_before_restore    row_count_after_restore
    abc                   xyz                       100                              
       50
    Thanks!!!

    Something like below perhaps? Btw, I recommend using catalog view and dynamic management views instead of the old system tables (now called compatibility views)...
    SELECT
    COALESCE(a.db_name, b.db_name) AS db_name
    ,COALESCE(a.table_name, b.table_name) AS table_name
    ,a.row_count AS row_count_before_restore
    ,b.row_count AS row_count_after_restore
    FROM before_restore AS b FULL OUTER JOIN after_restore AS a ON b.db_name = a.db_name AND b.table_name = a.table_name
    WHERE b.row_count <> a.row_count OR b.db_name IS NULL OR a.db_name IS NULL
    Tibor Karaszi, SQL Server MVP |
    web | blog

  • Return the rows of the table where a column contains a specific value first

    I want my query to return the rows of the table where a column contains a specific values first in a certain order, and then return the rest of the rows alphabetized.
    For Example:
    Country
    ALBANIA
    ARGENTINA
    AUSTRALIA
    CANADA
    USA
    Now i want USA and CANADA on top in that order and then other in alphabetized order.
    Edited by: 986155 on Feb 4, 2013 11:12 PM

    986155 wrote:
    If it is 2 then i can write a case... i want generalised one where may be around 5 or 6 mentioned should be in descending order at the top and remaining in ascending order there after.Computers tend not to work in 'generalized' ways... they require specifics.
    If you store your "top" countries in a table you can then simply do something like...
    SQL> ed
    Wrote file afiedt.buf
      1  with c as (select 'USA' country from dual union
      2             select 'Germany' from dual union
      3             select 'India' from dual union
      4             select 'Australia' from dual union
      5             select 'Japan' from dual union
      6             select 'Canada' from dual union
      7             select 'United Kingdom' from dual union
      8             select 'France' from dual union
      9             select 'Spain' from dual union
    10             select 'Italy' from dual
    11           )
    12      ,t as (-- top countries
    13             select 'USA' country from dual union
    14             select 'United Kingdom' from dual union
    15             select 'Canada' from dual
    16            )
    17  select c.country
    18  from   c left outer join t on (t.country = c.country)
    19* ORDER BY t.country, c.country
    SQL> /
    COUNTRY
    Canada
    USA
    United Kingdom
    Australia
    France
    Germany
    India
    Italy
    Japan
    Spain
    10 rows selected.

  • The simplest way for plsql procedure to return multiple rows

    Hi,
    What is the simplest way for plsql procedure to return multiple rows (records). There are many combination of ways to do it but I am looking for a solution that is appropriate for plsql beginners. Many solutions use cursors, cursor variables, collections and more that kind of things that are complex on the face of it. Is it somehow possible to achieve the same with less effort?
    Sample query would be: SELECT * FROM EMPLOYEES;
    I want to use returned rows in APEX to compose APEX SQL(in that context plsql) report.
    It is enough to use just SELECT * FROM EMPLOYEES query in APEX but I want to use plsql procedure for that.
    Thank you!

    Hi,
    It depends :-).
    With +...that is appropriate for plsql beginners...+ in mind... it still depends!
    The list of techniques (ref cursors, cursor variables, collections, arrays, using explict SQL) you have referenced in your post can be made to work. but...
    +Is it somehow possible to achieve the same with less effort?+ Less effort : That needs to be defined (measured). Especially in the context of pl/sql beginners (who is a beginner?) .
    What is the level of "programming experience" ?
    What is the level of understanding of "Relational Result set" as processible in Oracle?
    If you are looking for
    Process_the_set_of rows_in APEX () kind of capabilitywhich "abstracts/hides" relation database from developers when working on relation database, it may not be the best approach (at least strategically). Because I believe it already is abstracted enough.
    I find REF CUROSOR most effective for such use, when the "begginer" has basic understanding of processing SQL result set .
    So in a nut shell, the techniques (that you already are familiar with) are the tools available. I am not aware of any alternative tools (in pure Oracle) that will simplify / hide basics from develpers.
    vr,
    Sudhakar B.

  • Query to return ALL rows even those with zero counts

    Hi,
    The following query will return only those rows that have a non zero count value:
    select c.id, a.name, count(*) as XYZ from CON c, CUST a
    where c.help !='1' and (c.id = a.id) group by c.id, a.name order by c.id;
    The results are:
    1 ME 3
    3 YOU 4
    What i want is to return all rows in CUST and the count, XYZ, that correspond to each row in CUST that matches the whare condition above, even if the count is zero.
    ie
    1 ME 3
    2 WE 0
    3 YOU 4
    Can this be done?

    You may want to get the counts then do the outer join. If you simply count with an outer join you will get 1 for 'WE' because there is a row in the cust table with 'WE'. This may work for you;
    with
      cust as (
       select 1 id, 'ME' name from dual union all
       select 2 id, 'YOU' name from dual union all
       select 3 id, 'WE' name from dual),
      con as (
       select 1 id, '2' help from dual union all
       select 1 id, '2' help from dual union all
       select 1 id, '2' help from dual union all
       select 2 id, '2' help from dual union all
       select 2 id, '2' help from dual union all
       select 2 id, '2' help from dual union all
       select 2 id, '2' help from dual)
    -- end of test data 
    select a.id, a.name, nvl(c.cnt,0) xyz
    from cust a, 
       (select id, help, count(*) cnt
       from con
       where help !='1'
       group by id, help) c
    where a.id = c.id(+)

  • How to create a function that returns multiple rows in table

    Dear all,
    I want to create a funtion that returns multiple rows from the table (ex: gl_balances). I done following:
    -- Create type (successfull)
    Create or replace type tp_gl_balance as Object
    PERIOD_NAME VARCHAR2(15),
    CURRENCY_CODE VARCHAR2(15),
    PERIOD_TYPE VARCHAR2(15),
    PERIOD_YEAR NUMBER(15),
    BEGIN_BALANCE_DR NUMBER,
    BEGIN_BALANCE_CR NUMBER
    -- successfull
    create type tp_tbl_gl_balance as table of tp_gl_balance;
    but i create a function for return some rows from gl_balances, i can't compile it
    create or replace function f_gl_balance(p_period varchar2) return tp_tbl_gl_balance pipelined
    as
    begin
    return
    (select gb.period_name, gb.currency_code, gb.period_type, gb.period_year, gb.begin_balance_dr, gb.begin_balance_cr
    from gl_balances gb
    where gb.period_name = p_period);
    end;
    I also try
    create or replace function f_gl_balance(p_period varchar2) return tp_tbl_gl_balance pipelined
    as
    begin
    select gb.period_name, gb.currency_code, gb.period_type, gb.period_year, gb.begin_balance_dr, gb.begin_balance_cr
    from gl_balances gb
    where gb.period_name = p_period;
    return;
    end;
    Please help me solve this function.
    thanks and best reguard

    hi,
    Use TABLE FUNCTIONS,
    [http://www.oracle-base.com/articles/9i/PipelinedTableFunctions9i.php]
    Regards,
    Danish

Maybe you are looking for