Querying a DBXML from Within

Hi,
I am relatively new to the concept of DBXML, but am loving every bit of it, especially our project is SOA based.
My Question is that we can do this in shell
dbxml>q 'collection()//x/string()'
now what I want to ask is that, is there a way to store the Queries in kind of an XML file contained in a container using putdocument() such that we could do something like
The Query.xml file
<Q><q>collection()//x/string()</q></Q>
the query in shell as
dbxml> q 'let $i:=collection//q/string()
return execute($i)'
or something like that.
Meaning the queries are stored in the DBXML container itself and are looked up as required and then executed, something like a view or Stored procedure functionality, so that we can keep these query files in container itself for better maintainability and manageability.
Thanks

Hi,
Storing the queries as metadata inside a container may provide the functionality that you want. Metadata is information related in some way to a document but maintained separately.
The string that represents the query can be stored as metadata for a dedicated document (this document can be an empty one, as it doesn't need to contain any information) that represent the query. You can retrieve the query string than use it to subsequently perform the get operations you want. The dbxml shell is somehow limited in that it doesn't allow you to redirect and execute the query represented by the string result of a previous query (contextQuery is used to query against the last results as the context item). So, you can implement this programmatically using one of the APIs available.
Or you may want to store all your queries in a separate dedicated container.
A short example in the dbxml shell would be:
- store a query as metadata for an empty document inside the container:
dbxml> setMetadata q1 "" querystring string "collection()//x/string()"
- retrieve the query from the q1 document's metadata:
dbxml> query "doc('container.dbxml/q1')/dbxml:metadata('querystring')"
- programmatically you would use the stored query and execute it against the container; this could will imply XmlManager::query, XmlResults::next, XmlValue::asString and another XmlManager::query call, or alternatively using XmlQueryExpression::execute.
Regards,
Andrei

Similar Messages

  • How to query webservice datacontrol from bean

    Hi all,
    In Jdeveloper 11 I have a web-service based data-control. In order to perform some checks, I need to query that DC from within a bean. Only question is, how to do that?
    If it were a 'normal' VO based DC I would use something like this:
    DCBindingContainer bindings = (DCBindingContainer)BindingContext.getCurrent().getCurrentBindingsEntry();
    DCIteratorBinding iter = bindings.findIteratorBinding("EmployeesView1Iterator");
    RowSetIterator rsi = iter.getRowSetIterator();
    rsi.next();
    Row row = rsi.getCurrentRow();
    String s = (String)row.getAttribute(1);
    But in this case the String s = (String)row.getAttribute(1); returns rubbish. The method in the DC I want to call takes a parameter as input, and returns one row.
    Any help would be greatly appreciated.
    Arno

    Hi Frank,
    I don't know what it returns, but the iterator I got in my example was the methodIterator. When I call the accessorIterator it does work. So, when I call row.getAttribute("soandso"); the correct data is returned to me.
    Arno

  • SELECT query from within a stored procedure

    DB Version:10gR2
    For auditing purpose, i just want to execute the query within the IF condition, and get the results for spooling. But i am getting PLS-00428 error. Can't i just execute a SELECT query and get its results displayed in SQLPLUS so that i can spool them?
    SQL&gt; create or replace procedure ship_dtl_aud
      2  is
      3  v_exists number;
      4 
      5  begin
      6  
      7  Select count(1) into v_exists
      8  From ship_dtl
      9  WHERE track_code = 10
    10  AND mod_date_time &lt; SYSDATE - 1/(24*60);
    11 
    12   if v_exists&gt;0
    13   then
    14            select s.username,s.sid, s.serial#, s.terminal,p.spid
    15   from v$session s, v$process p
    16   where s.paddr = p.addr and s.sid in (select SESSION_ID from V$LOCKED_OBJECT);
    17 
    18          end if; 
    19  end;
    20  /
    Warning: Procedure created with compilation errors.
    SQL&gt; show errors
    Errors for PROCEDURE ship_dtl_aud:
    LINE/COL ERROR
    14/11    PLS-00428: an INTO clause is expected in this SELECT statement

    Within PL/SQL code, the results of a query have to be returned from the SQL engine to the PL/SQL engine, hence why it is asking you to include an INTO within your query. Note that the PL/SQL engine is running on the database server so it has no interface to display output to. To output from within PL/SQL you would have to write the data out yourself to whatever output you want e.g. use DBMS_OUTPUT to put the data to the standard output buffer (which can then be read by SQL*Plus if serveroutput is set to "on") or written out to a file on the server, or written out to a table.
    You are assuming that because you can execute SQL from SQL*Plus and spool the output, you can do the same within PL/SQL. This is not the case. When SQL*Plus issues a SQL statement, it goes to the SQL engine and the results of that cursor (as an SQL query is a cursor) are collected by SQL*Plus and it displays them itself. When PL/SQL issues a SQL statement, it goes to the SQL engine and the results of that cursor come back to PL/SQL. PL/SQL doesn't have a display mechanism, so the results have to be collected INTO something.
    Hope that's clear.

  • Querying free space on RDBMS server's drive from within the RDBMS?

    Hi,
    I would like to query free space on a certain drive of the RDBMS
    host mashine from within the RDBMS. Is this feasable?
    TIA,
    Tamas Szecsy

    Depends on the OS and what type of object you are querying from.
    if in Sql*plus you can use the 'host' command to get into the
    shell and execute OS commands (bdf on HP-UX for example). I've
    never seen an Oracle package that queries that sort of
    information.

  • Can not query from v$instance and v$session from within Pro*C program

    Hi there,
    We have Oracle 10.2.0.1 enterprise edition running on Linux (Red Hat 4 ES)
    Our Pro*C developer tries to query the version from v$instance view and is getting errors when compiling his Pro*C programs.
    The related Oracle user account has the SELECT ANY DICTIONARY privilege, so if he tries from the sqlplus, he has no problem querying the v$instance or v$session views. His problem is when he is trying to compile his Pro*C program against the very same Oracle account.
    Any help/input is greatly appreciated.
    R/ Zafer
    Here are the errors he is getting:
    Pro*C/C++: Release 10.2.0.1.0 - Production on Thu Jun 24 12:54:04 2010
    Copyright (c) 1982, 2005, Oracle. All rights reserved.
    System default option values taken from:
    /home/oracle/product/10.2.0/Linux6
    4/precomp/admin/pcscfg.cfg
    Error at line 150, column 4 in file ../database.pc
    EXEC SQL SELECT version INTO :inputLine FROM V$INSTANCE;
    ...1
    PLS-S-00201, identifier 'V$INSTANCE' must be declared
    Error at line 150, column 4 in file ../database.pc
    EXEC SQL SELECT version INTO :inputLine FROM V$INSTANCE;
    ...1
    PLS-S-00000, SQL Statement ignored
    Semantic error at line 150, column 4, file ../database.pc:
    EXEC SQL SELECT version INTO :inputLine FROM V$INSTANCE;
    ...1
    PCC-S-02346, PL/SQL found semantic errors

    I issued FULL DB EXPORT / IMPORT privilege to the related Oracle user account and it works now.

  • Querying data from External Source from within FORMS

    I have a form that is built based on Oracle tables.
    I need to execute a Select statement via ODBC from within Forms procedures. This is going to a SQL Server DB to get some information for validation purpose.
    I do not need to bring this in to a Forms Block.
    Any thoughts?
    Thanks

    Hi
    What version of forms do you use? If you use forms 6i, take a look at the EXEC_SQL package. You can access oracle databases and ODBC databases (using OCA) independently of the main database connection -- well, I never tried but that is what the documentation says.
    I am not sure about version 9i... the package is there, but I could not find anything in the help about it (what is not a good sign...)
    hth
    Luis Cabral

  • Calling a stored procedure from within a ViewObject

    Is it possible to make stored procedure call from within a BC4J ViewObject? Basically something like this:
    select * from table(f1(3)); where f1 is a table function. Using Oracle's pipelined table functions?
    If not, is it possible to call a stored procedure from Java and have the returned results be put back into a BC4J RowSet.
    In addition, is there a way to create a JDBC Resultset from a BC4J RowSet?
    We need to be able to dynamically create our SQL statements (the entire SQL, not just the where clause) but are required to have these sql statements generated/executed from within a pl/sql stored procedure in the database.

    Is it possible to make stored procedure call from within a BC4J ViewObject? Basically something like this:
    select * from table(f1(3)); where f1 is a table function. Using Oracle's pipelined table functions?
    Yes. Using our expert-mode query feature this is possible.
    is it possible to call a stored procedure from Java and have the returned results be put back into a BC4J RowSet.
    Yes. See this article about basing a view object on a REF CURSOR:
    http://radio.weblogs.com/0118231/2003/03/03.html
    In addition, is there a way to create a JDBC Resultset from a BC4J RowSet?
    No. Not directly. What's the business requirement here so I can understand better?
    We need to be able to dynamically create our SQL statements (the entire SQL, not just the where clause) but are required to have these sql statements generated/executed from within a pl/sql stored procedure in the database.
    REF CURSOR would work fine, or if it's just the statement that needs to be generated dynamically, you could fetch the text of the SQL statement from the stored procedure, then use createViewObjectFromQueryStmt(). Although this has runtime overhead involved with describing the query.
    The REF CURSOR based approach is probably best for this.

  • Call RFC enabled function from within VBA in BI 7.0

    Hello Experts,
    the problem that we have should be general, i have found some postings on this forum concerning it, but unfortunately no proper solutiont.
    I just want to have the possibility to call the rfc enabled function module from within the callback function in VBA after executing of some query.
    I have seen the suggestion to build a new RFC connection in VBA, but therefore you should hard-code all connection parameters (including user + password)
    in the VBA code, this solution is for us not acceptable due to the security reasons.
    Is there some way to use the existing connection of BEx Analyser in order to execute the function calls?
    This functionality was possible in 3.5 but not in 7.0 since many functions that were available in 3.5 are not supported now.
    Do you have experience/suggestions for this problem?
    Any help would be great.
    Thanks a lot,
    Kirill

    I've got the same problem. Did you find the solution?
    Thank you,

  • Start a BO report from within a web-application.

    Hi,
    An enuser want to start a BO report from within a web-application.
    The BO report ideally should not prompt for a login. The fact that we are using BO for reporting purposes should be transparent to the end users. The report should produce its output directly in Excel (pdf?) format. In WebI i can do a 'Save As' to obtain this, but it should go automatically so that the end users get their response directly in Excel
    the report should be parametrized. These parameters will be added to the URL by the calling application.
    To do a basic test of the Opendocument.jsp i created a number of test reports in WEBI, and i use the following URLs to execute them directly
    http://s-olaf-vtst150:8080/OpenDocument/opendoc/openDocument.jsp?&sPath=[My reports]&sDocName=tmsd1&sType=rep&sRefresh=Y
    http://s-olaf-vtst150:8080/OpenDocument/opendoc/openDocument.jsp?&sPath=[My reports]&sDocName=Yearselection&sType=rep&sRefresh=Y&lsSYear:=2002
    So this covers points 1 & 4
    What are the options for points 2 & 3?
    Kind regards,
    Johan

    The BO XI 3.1 environment works quite well now.
    Two more questions:
    1. When a user being member of the Readers group, still sees the Edit button in Webapplication - Infoview. Is it possible to hide or disable that Edit button ?
    2. Is it possible to make a user only seeing a part of the data in the universe ? When a query is run with a parameter, the user ses the parameter in the left column ... but in that way a normal user can change the value of that parameter giving him the possibility to see things he should not see. Making a separate query per user is overkill and too much work to do. Is BO XI 3.1 able to offer this possibility and how ?
    Rgds,
    Johan

  • Query cannot be parsed within the Builder ORA-00900: invalid SQL statement

    Why am I getting the error message "Query cannot be parsed within the Builder. If you believe your query is syntactically correct, check the ''generic columns'' checkbox below the region source to proceed without parsing. ORA-00900: invalid SQL statement"
    If I run the query in sqlplus it comes back with "no rows selected" which is what I want.
    The function is valid and the user has privileges to run it.
    Is there something I can do about it?
    If I only have any field instead of the function the error goes away.
    Can someone explain what is happening? I'm using 2.0.
    select
    F_TOTAL_AMOUNT_PAID('fees',a.acct_fee_id,0) "Fee Paid"
    from fee_component a, fee b, license c
    where a.acctfee_id = b.acctfee_id
    and b.license_id = c.license_id
    and b.fee_status = 'U'
    and c.client_id = :P301_CLIENT_ID
    Thanks I really appreciate any help I can get.

    Does your parsing schema have direct granted privileges to execute the function or privileges via a role? If it is through a role, you need to directly grant execute on the function to your parsing schema.
    Mike

  • Best way to spool DYNAMIC SQL query to file from PL/SQL

    Best way to spool DYNAMIC SQL query to file from PL/SQL [Package], not SqlPlus
    I'm looking for suggestions on how to create an output file (fixed width and comma delimited) from a SELECT that is dynamically built. Basically, I've got some tables that are used to define the SELECT and to describe the output format. For instance, one table has the SELECT while another is used to defined the column "formats" (e.g., Column Order, Justification, FormatMask, Default value, min length, ...). The user has an app that they can use to customize the output...which leaving the gathering of the data untouched. I'm trying to keep this formatting and/or default logic out of the actual query. This lead me into a problem.
    Example query :
    SELECT CONTRACT_ID,PV_ID,START_DATE
    FROM CONTRACT
    WHERE CONTRACT_ID = <<value>>Customization Table:
    CONTRACT_ID : 2,Numeric,Right
    PV_ID : 1,Numeric,Mask(0000)
    START_DATE : 3,Date,Mask(mm/dd/yyyy)The first value is the kicker (ColumnOrder) as well as the fact that the number of columns is dynamic. Technically, if I could use SqlPlus...then I could just use SPOOL. However, I'm not.
    So basically, I'm trying to build a generic routine that can take a SQL string execute the SELECT and map the output using data from another table to a file.
    Any suggestions?
    Thanks,
    Jason

    You could build the select statement within PL/SQL and open it using a cursor variable. You could write it to a file using the package 'UTL_FILE'. If you want to display the output using SQL*Plus, you could have an out parameter as a ref cursor.

  • Query Performance Tuning from a cockpit

    When running some queries from within a cockpit we are expreienceing long search times from the cubes. What methods can be used to tune queries and improve search times? Is there a way to get an explain plan (Oracle featrue) of the query? Can we trace the steps and bottle necks that a query runs into?

    Ryan, Try to search for the topic posted couple a days back. All you have to do is search for Performance word.
    Topics:Performance started by "thisquestion 4u"
    Posted: Jul 25, 2005
    Let me know if you need help.
    Pete

  • Query Cannot be Parsed Within Builder

    Hi,
    I'm trying to parse different Oracle database connections so users can do a search by database. I am setting this up in the HTML DB and have set up the appropriate Item which is P"(_HUB and within this I have set up the List Of Values.
    However, I get the following error:
    Query cannot be parsed within the Builder. If you believe your query is syntactically correct, check the ''generic columns'' checkbox below the region source to proceed without parsing. The query can not be parsed, the cursor is not yet open or a function returning a SQL query returned without a value.
    declare
    v_sql varchar2(4000);
    pshub varchar(15) := 'P29_HUB';
    begin
    v_sql := 'SELECT CLIENTACC.CLIENTID, CLIENTACC.ACCOUNT, CLIENTACC.ACCOUNTDESC, CLIENTACC.BACKOFFACCOUNT from CLIENTACC@'||pshub||'';
    end;
    Can someone please advise.
    Cheers.

    As I see in the query(v_sql) , you missed the quotes ;
    Try this now :
    declare
    v_sql varchar2(4000);
    pshub varchar(15) := 'P29_HUB';
    begin
    v_sql := 'SELECT CLIENTACC.CLIENTID, CLIENTACC.ACCOUNT, CLIENTACC.ACCOUNTDESC, CLIENTACC.BACKOFFACCOUNT from CLIENTACC@''||pshub||'' ';
    end;

  • Calling another cache from within AbstractProcessor.process fails, why?

    I want to enrich a certain data object in a distributed cache via the EntryProcessor framework. The new data is looked up from another nearby cache.
    However, when calling otherCache.get(id) Coherence throws an exception saying that it does not allow blocking calls from within a processor:
    *[java] Caused by: com.tangosol.util.AssertionException: poll() is a blocking call and cannot be called on the Service thread...*
    Is this fixable? What am I missing? Does anyone recommend alternative ways to read data from other caches inside AbstractProcessor?
    Thanks in advance,
    -Stefan
    This is the calling code that executes in the node where the primary object is:
    public class ExternalPropertiesUpdateProcessor extends AbstractProcessor implements PortableObject {
    @Override
    public Object process(InvocableMap.Entry entry) {
    Session session = null;
    if (entry.isPresent()) {
    session = (Session) entry.getValue();
    NamedCache cidCache = CacheFactory.getCache("cidCache");
    Long oldCid = new Long(97);
    CidConversion cidCon = (CidConversion) cidCache.get(oldCid); // * it fails here with above exception!
    session.setCid(cidCon.getNewCid());
    session.setState(Session.SESSION_CLOSED);
    entry.setValue(session); // make session changes durable in cache
    return session;
    Edited by: [email protected] on Dec 10, 2009 9:35 AM

    Ben Stopford wrote:
    Hi Rob
    You mention:
    If you call back to the same cache service via an invocation service, you still risk a deadlock or a livelock due to thread-pool depletion. It looks like it is working, then you may run into the problem. It is not 100% safe.which sparked my interest. Would you mind elaborating a little further. I'd always assumed that the threadpools for separate services were independent and thus there was no chance of deadlock from cross-service calls such as this.
    Thanks in advance
    BenHi Ben,
    as I mentioned, it can cause a problem if you indirectly call back to a service which was on the call stack.
    Let's see an example:
    You send an entry processor to a cache in service A, which synchronously (with the query() method) calls to Invocation service I in which the invocable agent sends an entry-processor to service A (again) targeted to an entry on the same node.
    Let's for the sake of the simplicity of the example suppose service A has a thread pool of size 2.
    You send two such entry-processors on entries residing in the same node.
    We now have a possible deadlock. If both entry-processors entered the first process() method (doesn't matter what entry as long as they are on the same node), they can both proceed into the invocation service call, but from that none of them can proceed further to the inner invoke() call, because there are no more free threads in service A!!! Poof, deadlock, both threads will wait until a thread becomes available... and none will become available because none of the service calls can proceed.
    Of course, starting with 3.5 the Guardian will kill one of the threads (at least), and in earlier version it will also time out, but the point is that they will not be able to complete in this scenario.
    Best regards,
    Robert

  • Calling a Member Function from within a Cursor in a Procedure

    Hello Folks
    I'm a newbie to oracle and am in the process of learning 10G. My question is:
    I created a type called row_po and defined a member function getCost() which returns the total cost of the order with line items as nested table, which i intend to call from within a procedure. In the procedure my SELECT returns multiple records and hence I need to use a cursor. For each record I've got to display the order_no, qty and order_cost (qty and order_cost are part of a line items nested table). I'm able to get to the order_no and qty but don't know how to call the member function to get the order_cost. Here's my procedure:
    CREATE OR REPLACE PROCEDURE get_podet(part_num in number)
    AS
    CURSOR c2 is
    SELECT *
    FROM tab_po po, TABLE (po.LineItemList_nestab) L
    WHERE L.PartNo = part_num;
    BEGIN
    FOR crec in c2 LOOP
    DBMS_OUTPUT.PUT_LINE('ORDER NUMBER: ' || crec.PONo);
    DBMS_OUTPUT.PUT_LINE('LINE QTY: ' || crec.Qty);
    {color:#ff0000}*DBMS_OUTPUT.PUT_LINE('ORDER VALUE: ' || ''); -- order_cost which should be returned from the member function i've mentioned --*
    {color}END LOOP;
    EXCEPTION
    WHEN OTHERS THEN
    DBMS_OUTPUT.PUT_LINE('Failed' || 'SQLCODE: ' || SQLCODE);
    DBMS_OUTPUT.PUT_LINE('SQL ERROR MESSAGE ' || SQLERRM);
    END;
    The line in red is where i want to call my function getCost() which is a member of tab_po po as mentioned in my SELECT.
    Any thoughts highly appreciated.
    Thanks and Regards

    One way would be to just run the query in a editor (sqlplus or toad) and see whats the column name.
    Before that can you show us the structure of the type.
    If you declare a table type without an object then the default column name is COLUMN_VALUE else the object filed name is taken.
    Example without object in table type.
    SQL> create or replace type tbl as table of integer
      2  /
    Type created.
    SQL> create or replace function fn return tbl
      2  as
      3     ltbl tbl;
      4  begin
      5     select level bulk collect into ltbl
      6       from dual
      7    connect by level <= 10;
      8
      9     return ltbl;
    10  end;
    11  /
    Function created.
    SQL> select * from table(fn)
      2  /
    COLUMN_VALUE
               1
               2
               3
               4
               5
               6
               7
               8
               9
              10
    10 rows selected.
    Example with object in table type.
    SQL> create or replace type obj as object(no integer)
      2  /
    Type created.
    SQL> create or replace type tbl as table of obj
      2  /
    Type created.
    SQL> edit
    Wrote file afiedt.buf
      1  create or replace function fn return tbl
      2  as
      3     ltbl tbl;
      4  begin
      5     select obj(level) bulk collect into ltbl
      6       from dual
      7    connect by level <= 10;
      8     return ltbl;
      9* end;
    10  /
    Function created.
    SQL> select * from table(fn)
      2  /
            NO
             1
             2
             3
             4
             5
             6
             7
             8
             9
            10
    10 rows selected.Edited by: Karthick_Arp on Jan 13, 2009 5:00 AM

Maybe you are looking for

  • Apple Multiple Scan 1705 - usable with modern video cards?

    I still have an old Apple Multiple Scan 1705 display which I've been using continuously since ~1995. Even though I don't have a Mac anymore (I know, I know, mea culpa), I hooked it up to my PC and it has worked great. But, I recently received a newer

  • My wireless is REALLY screwy now!

    I installed Arch this morning. (Best distro Ive ever used BTW... SO FAST!!!) It has xfce running I tried to set up wireless, several ways, and I dont know whats going on with it anymore... Im using a  ralink rt2500 some things I assume will be helpfu

  • Screensaver Portrait Orientation

    Since updating to Leopard my Portrait (vertical) photos are displayed horizontally. I've searched this forum, googled it, and checked my "Missing Manual" and can't find an help. Can anyone tell me how to correct this so it displays correctly? Thanks

  • How do we create a jdbc onnection pool using WLST in an existing domain

    I am using WLST for creating weblogic 8.1 sp4 domain. The scripts I have create connection pools at the creation of domain. These scripts are used by other developers to create their local domains. I would like to avoid the creation of domain from sc

  • There is no table dba_network_acls in my database

    there is no table dba_network_acls in my database I have created this database manually in oracle 11G manually. i think i have istall a package to create this table can anyone tell me the package name and how to install it or is there any other metho