DatabaseProcedure with the return type preceded of the schema name

Salvation (Paco)

I have a question on the DatabaseProcedure class. We use proxy Oracle users to our database connections.
Everything is accessible via a role of database that are granted to the user. All of our database objects, tables, etc. are protected by this database role.
When I want to call a function/procedure of database, I need to add the name of the schema as a prefix to the custom database object that uses us for parameters and return types.

So far so good. I can also define a parameter prefixed by the name of schema via the DatabaseProcedure.registerArrayType...
But when I try to set a function call that uses this parameter I get an error saying "the statement is not valid.
The problem is the regular pattern of PROCEDURE_DEFINITION:
private static final Pattern PROCEDURE_DEFINITION = Pattern.compile("\\s* (FUNCTION|PROCEDURE) \\s+ ([\\w.$]+) \\s* (?:\\((.*?)\\))? \\s* (?:RETURN\\s+(\\w+))? \\s* ;? \\s*", CASE_INSENSITIVE | COMMENTS | DOTALL);
The return type cannot be prefixed by the name of schema.

Any good suggestions or workarounds?

I have actually change the duration of reflection model to make it work-, but I really don't like this solution over the long term.

/ Torben

Published by: Zonic 2013-05-07 10:52

Hi Torben,

I think that I have a work around for the problem which might work for you. If you look at the source of DatabaseProcedure.registerArrayType you will find that it is actually called DatabaseProcedure.registerCustomParamType.

public static void registerArrayType(String name)
{
  registerCustomParamType(name, Types.ARRAY, Array.getORADataFactory(), name);
}

A solution you can replace calls to DatabaseProcedure.registerArrayType with calls to DatabaseProcedure.registerCustomParamType as follows.

// Instead of DatabaseProcedure.registerArrayType("NAME.WITH.DOTS") call:
DatabaseProcedure.registerCustomParamType("anyNameWithoutDots", Types.ARRAY, Array.getORADataFactory(), "NAME.WITH.DOTS"); // Don't forget to use uppercase here.

DatabaseProcedure dp = DatabaseProcedure.define("procedure my.procedure(param1 in out anyNameWithoutDots)");

DatabaseProcedure.ParamType type = dp.getParamDef(0).getType();
System.out.println(type.getName() + " is " + type.getTypeName()); // ANYNAMEWITHOUTDOTS is NAME.WITH.DOTS

In this way, that you don't have to use the 'illegal' name in the definition of DatabaseProcedure.

Kind regards
Paco van der Linden

Tags: Java

Similar Questions

  • Return of the mistake of MUSE: why do we not have several files with the same name?

    Well - I thought I had all this worked and fixed, but I met the download error 'Why do we have several files with the same name' once again.  (I downloaded all the files several times today in order to 1) works the way it worked the last time and 2) get an OAM file that is not loading for some reason any load again and the download takes about an hour to transfer all the files manually.

    To recap:

    (1) an option "Upload only modified files" returns the 'Muse has encountered an error and closes.  Why do we have several files with the same name? "error just as before.

    (2) a full download will work but takes forever and is NOT a substitution for work changed files option.

    Please advise with possible solutions!

    -Dave

    Is it possible to have two .oam different files in different folders on your computer where the .oam files have the same name? I'm theorizing that there may be a bug in the treatment to ensure the folder created for a .oam placed on the server receives a unique name, particularly in the case of a partial update of the site on the server.

    Please send us the .muse file and all the files in .oam related to [email protected] along with a link to this topic for the context so we can attempt to reproduce this error and isolate the root cause. If files are larger than 20 MB, you'll need to use a service such as Adobe send & Track, Dropbox, creative cloud, WeTransfer, etc. file sharing. Thank you.

  • Problem in creating several attributes XML with the same name of the attribute

    I am trying without success trying to create several attributes XML with the same name, as shown here in a Microsoft example configuration file:



      
         
         
         
      

    I'm calling the NewDocument GetRootElement functions and then "newelement" (appSetting), "newelement" (add)

    Then I call AddAttribute with add, key & Key0, then with add, value & 0.  This seems to work fine but when I try to add the second pair of key & Key1 and value attributes & 1 for item "Add" replaces ""and I find myself with"" only.

    I do something wrong or CVI is not able to create an XML of this type?

    Thank you

    Here's how you do it. I show not to keep things simple error checking.

    #include

    public static void CreateAddElement (mother of CVIXMLElement, const char * key, const char * value)
    {
    Add the CVIXMLElement;
    CVIXMLNewElement (parent, -1, 'Add', &add);)
    CVIXMLAddAttribute (add, "touch", key);
    CVIXMLAddAttribute (add, "value", value);
    CVIXMLDiscardElement (add);
    }

    void main (void)
    {
    CVIXMLElement root, and appSetting;
    Doc CVIXMLDocument.
     
    CVIXMLNewDocument ("configuration", &doc);)
    CVIXMLGetRootElement(doc, &root);)
    CVIXMLNewElement (root,-1, "appSetting", and appSetting);
    CreateAddElement (appSetting, "Key0", "0");
    CreateAddElement (appSetting, "Key1", "1");
    CreateAddElement (appSetting, "Key2", "2");
    CVIXMLDiscardElement (appSetting);
    CVIXMLDiscardElement (root);
    CVIXMLSaveDocument (doc, 1, "c:\\temp\\temp.xml");
    CVIXMLDiscardDocument (doc);
    }

  • Mix records with the same name of the internal and external space (clip +)

    Hello

    I have a question regarding the reading of 'File': if having a folder on the inside and external space microsd, both are named "graphics". Is it possible to shuffel these 2 files with the same name? There are also a few other folders I want to be included, so I just couldn't use the "play all" option. I don't want to use replay by id3tag because mines are always screwed up and would be a lot of work to mark all the appropriate files in the.

    Thanks for help

    m.

    I've not played with playlists much.

    If ID3 tags are all screwed up, I would use the MP3tag utility to change the label of the kind in "Charts" on internal and external memory, then you access the kind-> just Charts and play at all.  It is probably not an option if your labels are blank and you don't want to ruin you, but it's really quick & easy to do with MP3tag.

    I think that even Windows Explorer (XP/Vista) can change the field type in the batch (select all 'charts' music files, click right properties, summary (Advanced) tab change the field of its kind in "Charts", OK).  I keep the ID3tags 'good' on my PC, but edit on my player according to the needs.

    Just another idea which is really easy if you're not afraid of screwing the ID3 tags.

  • Two objects with the same name

    Hi all

    In my production database, there is a materialized view and a table with the same name. The two objects have the same number and type of columns.

    Record from user_object table

    OBJECT_NAMESUBOBJECT_NAMEOBJECT_IDDATA_OBJECT_IDOBJECT_TYPECREATEDLAST_DDL_TIMETIMESTAMPSTATUSTEMPORARYGENERATEDSECONDARYNAMESPACEEDITION_NAME
    TEST_OBJ151373151373TABLE22/06/201222/06/20122012-06 - 22:15:39:30VALIDNNN1
    TEST_OBJ152287MATERIALIZED VIEW22/06/201208/03/20122012-06 - 22:16:08:46VALIDNNN19

    I have another mode to normal display, TEST_NORMAL_VIEW, which selects the data of TEST_OBJ.

    Then, on which table data select. Please give some input on this subject.

    Kind regards

    Matondo

    A materialized view has 2 objects internally for her

    1. the materialized view (it is more of a model)

    2. the table that stores the actual data.

    So when you create a materialized view, you can see 2 objects created by querying the USER_OBJECTS.

    See this

    SQL> create materialized view my_test_mv as select * from emp;
    
    Materialized view created.
    
    SQL> select object_type, object_name, data_object_id from user_objects where object_name = 'MY_TEST_MV';
    
    OBJECT_TYPE        OBJECT_NAME          DATA_OBJECT_ID
    ------------------- -------------------- --------------
    TABLE              MY_TEST_MV                  1638964
    MATERIALIZED VIEW  MY_TEST_MV
    

    Now, you may notice that DATA_OBJECT_ID has null for the MV. DATA_OBJECT_ID is the Segment where the data is stored. As MV object is just a model and does not have data to null.

    The user has no direct access to the MY_TEST_MV table. See this

    SQL> drop table my_test_mv;
    drop table my_test_mv
               *
    ERROR at line 1:
    ORA-12083: must use DROP MATERIALIZED VIEW to drop "KARTHICK"."MY_TEST_MV"
    

    Also, you can associate an existing table to a materialized using the clause ON TABLE PREDEFINED view.

    Here is an example

    SQL> drop materialized view my_test_mv;
    
    Materialized view dropped.
    
    SQL> create table my_test_mv_new as select * from emp;
    
    Table created.
    
    SQL> select object_type, object_name, data_object_id from user_objects where object_name = 'MY_TEST_MV_NEW';
    
    OBJECT_TYPE         OBJECT_NAME          DATA_OBJECT_ID
    ------------------- -------------------- --------------
    TABLE               MY_TEST_MV_NEW              1638967
    
    SQL> create materialized view my_test_mv_new on prebuilt table as select * from emp;
    
    Materialized view created.
    
    SQL> select object_type, object_name, data_object_id from user_objects where object_name = 'MY_TEST_MV_NEW';
    
    OBJECT_TYPE         OBJECT_NAME          DATA_OBJECT_ID
    ------------------- -------------------- --------------
    TABLE               MY_TEST_MV_NEW              1638967
    MATERIALIZED VIEW   MY_TEST_MV_NEW
    
    SQL>
    

    Once you associate a Table with a MV direct Table access is limited. You can directly access only the MV.

  • You can have two stored functions with the same name?

    Hi all

    You can have two stored functions with the same name?

    My version of DB - connected to Oracle Database 11g Enterprise Edition Release 11.2.0.1.0

    Thank you.

    You can have the same name as long as they are within a package and with different parameters

    create or replace package test_pkg

    as

    function my_func (p1 in number)

    return number;

    function my_func (at number p1, p2)

    return number;

    end test_pkg;

    /

    create or replace package body test_pkg

    as

    function my_func (p1 in number)

    Return number

    as

    Start

    return 0;

    end;

    function my_func (at number p1, p2)

    Return number

    as

    Start

    return 0;

    end;

    end test_pkg;

    /

  • New virtual machine for the model with the specific name

    Hello

    I'm trying to add some model VM to VAPP using recomposeVApp (...). And it works well except that I can not change the name of the virtual machine while recomposing. It takes the name of the model. But how to add VMS to model with the specific name? I use the v1.0 API.

    This is my code:

    ReferenceType vmTemplateRef = new ReferenceType();
    vmTemplateRef.setName ("MyNewVM"); This name is ignored. The name of the model is taken!
    vmTemplateRef.setHref (vmRef.getHref ()); reference to the model

    CompositionItemParamType vmItem = new CompositionItemParamType();
    vmItem.setSource (vmTemplateRef);

    create the type params VAPP recompose.
    RecomposeVAppParamsType recomposeVAppParamsType = new RecomposeVAppParamsType();
    recomposeVAppParamsType.setName (vAppRef.getName ()); The name of vApp. It is ok.

    added the element of the virtual machine.
    The newItems < CompositionItemParamType > recomposeVAppParamsType = list
    . getItem().
    newItems.add (vmItem);

    Task task = vapp.recomposeVapp (recomposeVAppParamsType);

    Thank you

    Hello

    For after this code fragment:

    vmTemplateRef.setName ("MyNewVM"); This name is ignored. The name of the model is taken!

    The model name is ignored because vmTemplateRef is the only reference to the object that will be used for the operation of recomposition. If changing the name it will be always ignored.

    I think that changing the name of the virtual machine template for recompose cannot be done as follows:

    (1) operation recomposeVApp().

    (2) get the recomposed VAPP

    (3) download the children-> VM you want to change.

    (4) change the name of the virtual computer.

    I hope this helps!

  • How can I configure the element with the script names?

    Could Hello someone give me a hand?

    I created symbols on the stage of this script below.

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

    for (k = 0; k < 5; k ++) {}

    sym.createChildSymbol ("mySymB", "Stage");

    }

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

    How can I configure the element with the script names?

    Because, when I try to control a symbol by using the getSymbol("---") command.

    I need to know the name of the item given to each symbol.

    Concerning

    Yes, you're right.

    Using 'Code-Example' If you write sym.getSymbol ("mySymB") that edge returns the undefined value.

    With "Drag-and-drop-Example", you can use sym.getChildSymbols ().

  • CF8 cfquery multiple table join with the same names of columns - default

    This seems to be a defect in the CF8 cfquery object. I'm at a loss as to a solution or a good work around. With regard to the substance, this query is generated dynamically on the fly based on what is happening in it a user. This isn't the most elegent SQL but work and return all columns. The app itself is a data viewer to look at the logs. Here is an example of a query being generated.

    Select *.

    of web_trans, web_info_trans, web_res_trans

    where (web_info_trans.trans_dte > = '' 2008-12-1)

    and web_info_trans.trans_dte < '' 2008-12-2)

    and (web_info_trans.trans_dte = web_trans.trans_dte)

    and (web_info_trans.trans_num = 5060345)

    and (web_info_trans.trans_num = web_trans.trans_num)

    and (web_res_trans.trans_num = 5060345)

    and (web_res_trans.trans_num = web_trans.trans_num)

    and (web_trans.web_trans_cde = "NTUI")

    and (web_trans.web_status_cde = 'P')

    and (web_trans. TRANS_NUM < 5060347)

    order of web_trans. TRANS_NUM / / desc

    These three tables contain a similar column called ZIP_CDE. They contain different values, and when this query is executed in Microsoft Query Analyzer results are displayed correctly. Run this same query SQL with CFQUERY and the value of one of the other tables (web_trans) will eventually replace the value for the other columns called ZIP_CDE. The exact amount columns are retruned only values some how get corrupted.

    This is a defect of cf8 is a book autour or an update that resolves this problem that I may have missed?

    Thank you for the ideas.

    Thus it seems still as a default since CF is essentially where, except for the return value play. Other query tools return results correctly so for me, it turns out be CF bug at a certain level.

    Actually I'm swinging to agree with you here, but not for the same reason.  CF actually * is * get all the columns back (as you say), it just doesn't expose a way to tell the difference between a column called 'x' and an another column called 'x', because the way to access the data in columns is simple queryname [columnName] [rowNumber] (or a Variant fo this, but all the amount of variations to that or abbrev. it).  This code shows how he has all four columns of the original two queries (being a stand-in for tables, in this case):


    Q1 = queryNew("");
    Q2 = queryNew("");
       
    queryAddColumn (q1, 'id', [1,2,3,4]);
    queryAddColumn (q1, "data", ["one", "two", "three", "four"]);
    queryAddColumn (q2, 'id', [1,2,3,4]);
    queryAddColumn (q2, "data", ["tahi", "rua", "toru", "wha"]); It's Maori, in case you are interested


    SELECT *.
    Q1, q2
    WHERE q1.id = q2.id

    So CF knows there are four columns (a call getMetadata (q3) get also demonstrates this), but it does not expose a way to approach the second (or even greater) column of the same name.  This is the bug/shortfall.

    However, relying on an underlying coldfusion.sql.QueryTable method, you can rename the columns, so:

    Then you're OK.

    I would be normally reluctant to recommend doing this, because these methods change from version to version of CF, but it's your call whether this approach will help you.

    To be honest, I'm with Owain who, even in SQL one generally doesn't work with columns with the same name, an alias them qualified with a table name/alias. As the table columns from of is not returned by SQL with the result set, it must be evidence against this by folding the columns in the first place.

    Also, I wonder at the bottom of the extraction of data, you don't really know the structure, that is to say, do SELECT *.  How can you know not even that is ours as the first column, second column, etc.?  I don't think that SQL applies in fact a contract that, t - it?  (I don't know).

    What are you actually do here?

    --

    Adam

  • Attributes with the same name - ADF BC Validation Messages

    Hi all

    I have two entities and associated views. Each of them have attributes with the same name. In my particular case, they are two dates - StartDate and EndDate. EndDate on both entities have validations (Expression of Script). The validations to check that the end Date is later than the Date of departure - "return newValue > StartDate. Is this a valid validation groovy script for dates?

    I have a unique creation page that contains these two entities. What is happening now, is that if the validation fails even one of the entities, fields of both entities are reported. In some cases, I can even see two validation error messages is displayed.

    Needless to say, rename the attribute on one of the entity (and the corresponding view object) seems to work.

    I have a simple repro case (contains Jdev project and SQL script) here - http://dox.bijesh.info/reproValidationMsg.zip and a screenshot here - http://dox.bijesh.info/ReproADFBCValidation.jpg

    Would be very happy if someone could either point out what I'm doing wrong or confirm that it is a bug.

    About:

    JDeveloper 11.1.1.3.0 JDEVADF_11.1.1.3.PS2_GENERIC_100408.2356.5660
    11.1.1.56.60 ADF business components
    Oracle IDE 11.1.1.3.37.56.60

    Edited by: Bijesh Krishnadas November 25, 2010 04:21 - corrected the groovy expression

    Bijesh Krishnadas wrote:
    FWIW, I've changed the validation script for "return false" on an entity and "return true" on the other. This leads to the same question as well.

    This seems to be a bug.

    However, using a validator compares as stated earlier is the right way to accomplish what you're trying to do.

  • [JS CS3] First plan a selection of documents when others with the same name?

    I have a few scripts that are used to perform various operations on the current selection in InDesign. Under normal circumstances these work very well, but I can't seem to reliable get the document/selection of foreground when there is another document opened with the same name. Most of the references to the document and any reference to the selection, I've tried so far will simply lead to this document which was recently opened (and has the same name).

    app.activeDocument.fullName always return the path to the most recently opened document of the same name, but app.documents [0] .fullName returns the correct path. Try to get the selection well will always return the selection of the most recently opened document of the same name, regardless of the question of if I try app.selection, app.activeDocument.selection or app.documents [0] how. I also tried with getElements() [0] annexed to the document reference, but it makes no difference.

    My primary environment is still CS3 and the problem seems to be that it only references the documents by name. Short tests with CS5 indicate that this has been resolved by Adobe, probably because it now makes reference to documents using a default id. Haven't tried CS4 but its document object not having a property id guess it will behave the same as CS3. Is there a way to get around this, or is the best I can do to detect the problem (a simple app.activeDocument! = app.documents [0] comparison seems to work reliably) and refuse to run if encountered?

    The real problem is that the collections in the documents with the same name think to bad.

    The APID solution was trying to solve the problem, but because it was not the document reference that was broken, the patch did not help...

    Substances

  • Columns with the same name but different data or precision length.

    DB version: 10 gr 2

    In a diagram, I need to find all of the columns with the same name but different or precision data length (if the column is of type number). I know I have to use the USER_TAB_COLS view for this. But I need to find a logic to compare the names of columns and its lengths.

    something like

    select t1.table_name
         , t1.column_name
         , t1.data_type
         , t1.data_length
         , t2.table_name
         , t2.column_name
         , t2.data_type
         , t2.data_length
      from user_tab_columns t1
         , user_tab_columns t2
     where t1.table_name != t2.table_name
       and t1.column_name = t2.column_name
       and t1.data_type = t2.data_type
       and t1.data_length != t2.data_length
    

    ... could be a starting point.

  • where to save the files under options the file name is duplicated how to remove an additional folder with the same name

    Under Options in Firefox, I clicked on save the files under downloads, but the file name twice and an additional file with the same name is created in the folder, i.e.:

    G:\Akbar's Songs\HAMARA DOWNLOADS\HAMARA FORUMS DOWNLOADS FORUMS

    As you can see the file repeats, how can I fix it?

    Also the music files, I download from a site of downloads as a WinRar file and I need to open it. Y at - it an option where the file opens automatically in the folder I chose?

    Thanks a lot for your help.

    Hi Akush, when you install 7 - zip, make itself the default application to open .zip and .rar files. So if you double click on the .rar file, it should open in 7 - zip. If you prefer to decompress immediately, right click the file and look for new 7 - zip items in the menu. I can't think of a way to do this automatically, however.

  • Add salutation to connect with the entry name

    I'm guessing that this was asked previously, but I can't find it anywhere.  Is it possible to add a form of address to communicate with the entry name?  For example, for a doctor Dr.  Yes Dr. Fred Jones for example?

    Use the prefix in the contacts

  • I have 2 bookmarks with the same name but different stuff in them. I want to remove one, but pass the contemts remaining bookmark

    I have 2 bookmarks with the same name but different stuff in them. I want to remove one, but pass the contemts remaining bookmark

    This is the first mention you made records. See this - https://support.mozilla.org/en-US/kb/Sorting%20bookmarks#w_rearranging-manually - and move individual bookmarks from one folder to the other folder. You may need to press the Alt key to display the Menu bar and the View menu item.

  • You are about to open a session "keiron.me.uk" with the user name "Gerry" site, but the site requires no authentication. Maybe it's attempt to deceive you.

    http://Keiron.me.UK

    This very annoying message what I select my site

    You are about to log on the site "keiron.me.uk" with the user name "Gerry", but the site requires no authentication. Maybe it's attempt to deceive you.

    It is ok with Internet Explorer

    To resolve this problem, simply is to remove all bookmarks you have to keiron.me.uk and then re-create by vising the site by typing the address directly into the address bar.

    If you want to manually fix it then, check the properties of the location of all bookmarks that you have for keiron.me.uk. It is probably similar to http://keiron:[email protected] remove the keiron:password @ section and the dialog box should not appear again.

Maybe you are looking for