Where to put a function to perform only once?

Question #1: I am writing an applet, and as part of it I have created a custom canvas class which extends the canvas class... When this is created I would like to perform a custom calculation of the size that it should be. Where is the best place to put this function? Right now I have put it in getPreferredSize(), but I'm afraid it might be called everytime i scroll or resize or whatever?
Question #2: When I load my IE browser and go to the page with my applet, then call the applet.getSize() function it works. When I hit the refresh button on IE, getSize returns 0. Is there a workaround to this? I have the getSize() in the init of the applet...
Thank you!
Rusty

Hi
About #1 question, the best place is at constructor class, "once a time" right? but getPreferredSize really is called so many time as needed, you know the reason. The simple workaround for #2 question is to store applet dimension at the very first call, also at applet construction.
Regards.

Similar Messages

  • Where to put custom function at?

    Let's say I make a custom function, do I make it a CFC or a tag?
    Here is some sample code (I put in bold my function call)
    <cfif IsDefined("form.submit")>
        <cfset data.comment = Trim(HTMLEditFormat(form.comment))>
        <cfset data.name = Trim(REReplace(form.name, "[^A-Za-z0-9 ]", "", "all"))>
        <cfset data.location = Trim(CustomFunction(form.location))><!--- where to put it? as cfc or as a tag? --->
        <cfif data.comment NEQ "">       
            <cfif data.name EQ "">
                <cfset data.name = "Anonymous">
            </cfif>
            <cfinvoke
            component="guestbook.cfc.db"
            method="insert_comment">
            <cfinvokeargument name="form_data" value="#data#"/>
            </cfinvoke>
        <cfelse>
            <cfset message="Comment is required!">
        </cfif>
    </cfif>

    Custom tags are different than udfs.  Let's stick with udfs.  Your location choices are:
    1.  If only one template is going to use it, you can put it in that template.  Otherwise,
    2. You can put it in a .cfm file and cfinclude that file whenever you want to call the function, or
    3. You can put it into a .cfc.
    A little while back, someone ran some tests and posted the results on one of these forums.  The gist of it was that Option 2 would run faster than Option 3.

  • Where to put initialization functions?

    Where should I put functions that are to only run once when
    the flash is initially loaded and never again? Previously I have
    put it in the first frames onEnterFrame() and then used stop(); so
    the frames don't play, but what if I want the frame to play? I've
    tried using a global boolean variable but this doesn't seem to work
    either. Any ideas?
    Thanks.

    Also, I think you have misunderstood the purpose of
    onEnterFrame(). It is poorly named and doesn't mean when you enter
    the frame.
    What it really means is to do something repeatedly at the
    frame rate – even if the timeline is stopped.
    So:
    this.onEnterFrame=function(){
    myInitialVariable=10;
    Means it will set the variable 20 or 30 times each second (or
    whatever your frame rate is) until you tell it: delete
    this.onEnterframe.
    Other than that, the best thing to do would be to read all
    the entries in the help file for the MovieClip class. There you
    will find the lovely onLoad event. Make a new movie with maybe 10
    frames and put this code in the first frame. Then test it and
    watch.
    this.onLoad=function(){
    trace("hello world");
    trace("How are ya");

  • How can I ensure a function is called only once in a query?

    I have a function (in a package) that returns the start date and end date to be used by my query. The query was taking bind variables but when I updated it to use the function calls it slowed down a lot.
    I tried creating an inline view that selects the start and end date and joins with the other table but this does not help. I thought the inline view would only be run once but this is not the case. I have my function print out a value from a sequence and i see that it is called thousands of times.
    Why would the procedure call be so much slower?
    How can I ensure that the function is only called once in the query?
    This is what I currently have:
    SELECT col1, col2
    FROM aTable,
    (SELECT proc.getStartdate startDate,
    proc.getEndDate endDate
    FROM dual) dt
    WHERE aTable.theDate >= dt.startDate
    AND aTable.theDate <= dt.endDate
    Thanks

    They get the begining and ending dates to be used by the query.
    My application uses the Oracle Portal. Each user can select their date range and it is stored as a user preference. The portal API provides funcitons for retrieving the preferences and I have encapsulated it in my procedure so the developers do not need knowledge of the portal. If they just restrict their queries to the dates returned by this function they will get the needed data.
    Our work around as been to pass these date variables around as bind variables.

  • Ever since installing iCloud and Lion my computer is slow or freezes.  The color wheel comes on and My work stops.  I have only a small window of time where my computers will function normally during the day. I know many others that have the same problem.

    Ever since installing iCloud and Lion my computer is slow or freezes.  The color wheel comes on and My work stops.  I have only a small window of time where my computers will function normally during the day. I know many others that have the same problem. I'll get 20-30 minutes of work done and then a sync or something comes on, the color wheel of death shows up, and my productivity is shot.  I have to shut the computer down the hard way!  when it comes back up, it is still either frozen or slow.  I've checked in at the genius bar and all they say is that there have been some problems that Apple is trying to fix.  It effects Mail, Contacts, Safari, Calendar....yeah, pretty much everything.  My iPhone and iPad are not effected as much so I end up doing what I can with them.  I've seen the blogs out there and understand that many have the same problem.  I have been waiting to read about a fix but I have found nothing!  Any ideas?

    Not enough free space on the startup disk can slow the system down.
    Right or control click the MacintoshHD icon. Click Get Info. In the Get Info window you will see Capacity and Available. Make sure there's a minimum of 15% free disk space.
    For startup issues...  open System Preferences > Users & Groups - Login Items. Delete any apps listed there then restart your mac.
    And disable the Lion "resume" feature.
    Open System Preferences > General
    Deselect:   Restore windows when quitting and re-opening apps
    And Spotlight may be indexing... you can turn that off > Turning Off Spotlight | Mac Tricks And Tips

  • Where to put the commit in the FORALL BULK COLLECT LOOP

    Hi,
    Have the following LOOP code using FORALL and bulk collect, but didnt know where to put the
    'commit' :
    open f_viewed;
    LOOP
    fetch f_viewed bulk collect into f_viewed_rec LIMIT 2000;
    forall i in 1..f_viewed_rec.count
    insert into jwoodman.jw_job_history_112300
    values f_viewed_rec(i);
    --commit; [Can I put this 'commit' here? - Jenny]
    EXIT when f_viewed%NOTFOUND;
    END LOOP;
    commit;
    Thanks,
    - Jenny

    mc**** wrote:
    Bulk collect normally used with large data sets. If you have less dataset such as 1000-2000 records then you canot get such a performance improvent using bulk collect.(Please see oracle documents for this)
    When you update records Oracle acquire exclusive lock for that. So if you use commit inside the loop then it will process number of records defined by limit parameter at ones and then commit those changes.
    That will release all locks acquired by Oracle and also teh memory used to keep those uncommited transactions.
    If you use commit outside the loop,
    Just assume that you insert 100,000 records, all those records will store in oracle memory and it will affect all other users performance as well.
    Further more if you update 100,000 records then it will hold exclusive lock for all 100,000 records addtion to the usage of the oracle memory.
    I am using this for telco application which we process over 30 million complex records (one row has 234 columns).
    When we work with large data sets we do not depends with the oracle basic rollback function. because when you keep records without commit itb uses oracle memory and badly slowdown all other processes.Hi mc****,
    What a load of dangerous and inaccurate rubbish to be telling a new Oracle developer. Commit processing should be driven by the logical unit of a transaction. This should hold true whether that transaction involves a few rows or millions. If, and only if, the transaction is so large that it affects the size constraints of the database resources, in particular, rollback or redo space, then you can consider breaking that transaction up to smaller transactions.
    Why is frequent committing undesirable I hear you ask?
    First of all it is hugely wasteful of rollback or redo space. This is because while the database is capable of locking at a row level, redo is written at a block level, which means that if you update, delete or insert a million rows and commit after each individual statement, then that is a million blocks that need to go into redo. As many of these rows will be in the same block, if you instead do these as one transaction, then the same block in redo can be transacted upon, making the operation more efficient. True, locks will be held for longer, but if this is new data being done in batches then users will rarely be inconvenienced. If locking is a problem then I would suggest that you should be looking at how you are doing your processing.
    Secondly, committing brings into play one of the major serialization points in the database, log sync. When a transaction is committed, the log buffer needs to be written to disc. This occurs serially for multiple commits. Each commit has to wait until the commit before has completed. This becomes even more of a bottleneck if you are using Data Guard in SYNC mode, as the commit cycle does not complete until the remote log is notified as written.
    This then brings us two rules of thumb that will always lead a developer in the right direction.
    1. Commit as infrequently as possible, usually at the logical unit of a transaction
    2. When building transactions, first of all seek to do it using straight SQL (CTAS, insert select, update where etc). If this can't be easily achieved, then use PL/SQL bulk operations.
    Regards
    Andre

  • Architecture question...where to put the code

    Newbie here, so please be gentle and explicit (no detail is
    too much to give or insulting to me).
    I'm hoping one of you architecture/design gurus can help me
    with this. I am trying to use good principals of design and not
    have code scattered all over the place and also use OO as much as
    possible. Therefore I would appreciate very much some advice on
    best practices/good design for the following situation.
    On my main timeline I have a frame where I instantiate all my
    objects. These objects refer to movieClips and textFields etc. that
    are on a content frame on that timeline. I have all the
    instantiation code in a function called initialize() which I call
    from the content frame. All this works just fine. One of the
    objects on the content frame is a movieClip which I allow the user
    to go forward and backward in using some navigation controls.
    Again, the object that manages all that is instantiated on the main
    timeline in the initialize() function and works fine too. So here's
    my question. I would like to add some interactive objects on some
    of the frames of the movieClip I allow the user to navigate forward
    and backward in (lets call it NavClip) . For example on frame 1 I
    might have a button, on frame 2 and 3 nothing, on frame 4 maybe a
    clip I allow the user to drag around etc. So I thought I would add
    a layer to NavClip where I will have key frames and put the various
    interactive assets on the appropriate key frames. So now I don't
    know where to put the code that instantiates these objects (i.e.
    the objects that know how to deal with the events and such for each
    of these interactive assets). I tried putting the code on my main
    timeline, but realized that I can't address the interactive assets
    until the NavClip is on the frame that holds the particular asset.
    I'm trying not to sprinkle code all over the place, so what do I
    do? I thought I might be able to address the assets by just
    providing a name for the asset and not a reference to the asset
    itself, and then address the asset that way (i.e.
    NavClip["interactive_mc"] instead of NavClip.interactive_mc), but
    then I thought that's not good since I think there is no type
    checking when you use the NavClip["interactive_mc"] form.
    I hope I'm not being too dim a bulb on this and have missed
    something really obvious. Thanks in advance to anyone who can help
    me use a best practice.

    1. First of all, the code should be:
    var myDraggable:Draggable=new Draggable(myClip_mc);
    myDraggable.initDrag();
    Where initDrag() is defined in the Draggable class. When you
    start coding functions on the timeline... that's asking for
    problems.
    >>Do I wind up with another object each time this
    function is called
    Well, no, but. That would totally depend on the code in the
    (Draggable) class. Let's say you would have a private static var
    counter (private static, so a class property instead of an instance
    property) and you would increment that counter using a
    setInterval(). The second time you enter the frame and create a new
    Draggable object... the counter starts at the last value of the
    'old' object. So, you don't get another object with your function
    literal but you still end up with a faulty program. And the same
    goes for listener objects that are not removed, tweens that are
    running and so on.
    The destroy() method in a custom class (=object, I can't
    stress that enough...) needs to do the cleanup, removing anything
    you don't need anymore.
    2. if myDraggable != undefined
    You shouldn't be using that, period. If you don't need the
    asset anymore, delete it using the destroy() method. Again, if you
    want to make sure only one instance of a custom object is alive,
    use the Singleton design pattern. To elaborate on inheritance:
    define the Draggable class (class Draggable extends MovieClip) and
    connect it to the myClip_mc using the linkage identifier in the
    library). In the Draggable class you can define a function unOnLoad
    (an event fired when myClip_mc is removed using
    myClip_mc.removeMovieClip()...) and do the cleanup there.
    3. A destroy() method performs a cleanup of any assets we
    don't need anymore to make sure we don't end up with all kinds of
    stuff hanging around in the memory. When you extend the MovieClip
    Class you can (additionally) use the onUnLoad event. And with the
    code you posted, no it wouldn't delete the myClip_mc unless you
    program it to do so.

  • Where to put GUI_PROGRESS_INDICATOR and error in CLOI_PUT_SIGN_IN_FRONT.

    Hello experts,
    I am currently debuggin my report and it is giving me a dump when I am trying to use FM
    CLOI_PUT_SIGN_IN_FRONT. It says that it only accepts character based values. Also,
    based on my code below, where can I put the function GUI_PROGRESS_INDICATOR so users can know
    what is happening in my report. This report is kinda long to execute. Also, will it hamper
    the performance of my report when using those 2 function modules?
    LOOP AT it_final ASSIGNING <fs_final>.
      get records from BKPF
        SELECT SINGLE bukrs belnr gjahr budat bldat xblnr bktxt FROM bkpf
        INTO (bkpf-bukrs, bkpf-belnr, bkpf-gjahr, <fs_final>-budat,
              <fs_final>-bldat, <fs_final>-xblnr, <fs_final>-bktxt)
        WHERE bukrs = <fs_final>-bukrs
          AND belnr = <fs_final>-belnr
          AND gjahr = <fs_final>-gjahr.
      if <fs_final>-shkzg = 'H', multiply dmbtr(amount in local currency)
      by negative 1
        IF <fs_final>-shkzg = 'H'.
           <fs_final>-dmbtr = <fs_final>-dmbtr * -1.
          CALL FUNCTION 'CLOI_PUT_SIGN_IN_FRONT'
          CHANGING
            value         =       <fs_final>-dmbtr.
        ENDIF.
      combine needed data to get long text
        CONCATENATE: <fs_final>-bukrs <fs_final>-belnr
                     <fs_final>-gjahr <fs_final>-buzei
                     INTO it_thead-tdname.
        CALL FUNCTION 'READ_TEXT'
          EXPORTING
            client                        = sy-mandt
            id                            = '0001'
            language                      = sy-langu
            name                          = it_thead-tdname
            object                        = 'DOC_ITEM'
          ARCHIVE_HANDLE                = 0
          LOCAL_CAT                     = ' '
        IMPORTING
          HEADER                        =
          TABLES
            lines                         = it_lines
         EXCEPTIONS
           id                            = 1
           language                      = 2
           name                          = 3
           not_found                     = 4
           object                        = 5
           reference_check               = 6
           wrong_access_to_archive       = 7
           OTHERS                        = 8.
       IF sy-subrc <> 0.
         MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
                 WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
       ENDIF.
      if successful, split long text into start and end date
        IF sy-subrc = 0.
          READ TABLE it_lines TRANSPORTING tdline.
          IF sy-subrc = 0.
            SPLIT it_lines-tdline AT '-' INTO
                  <fs_final>-s_dat <fs_final>-e_dat.
          ENDIF.
        ENDIF.
      get vendor name
        SELECT SINGLE name1 FROM lfa1
        INTO <fs_final>-name1
        WHERE lifnr = <fs_final>-lifnr.
        lv_age_of_rec = p_budat - <fs_final>-budat.
      condition for age of deposits
        IF lv_age_of_rec < 30.
          <fs_final>-amount1 = <fs_final>-dmbtr.
        ELSEIF lv_age_of_rec > 30 AND lv_age_of_rec < 60.
          <fs_final>-amount2 = <fs_final>-dmbtr.
        ELSEIF lv_age_of_rec > 60 AND lv_age_of_rec < 90.
          <fs_final>-amount3 = <fs_final>-dmbtr.
        ELSEIF lv_age_of_rec > 90 AND lv_age_of_rec < 120.
          <fs_final>-amount4 = <fs_final>-dmbtr.
        ELSEIF lv_age_of_rec > 180.
          <fs_final>-amount5 = <fs_final>-dmbtr.
        ENDIF.
        CLEAR: bkpf, it_lines-tdline.
      ENDLOOP.
    Again, thanks alot guys and take care!

    1) CLOI_PUT_SIGN_IN_FRONT will take any values, Character and numeric. It basically make the sign as pre-fix. Eg 53.6- to -53.6. Better way you could assign it to a Packed decimal and pass it to FM and then reassign it to the field.
    2)GUI_PROGRESS_INDICATOR  can be used before the process stats.. For example: you can use it before the select statment with the text 'Database selection...'
    rgds,
    TM
    Message was edited by: Thomas Mann
    Message was edited by: Thomas Mann

  • Where to put javascript code?

    Hello,
    I am trying to set some columns in a list as "read-only" and is using the following code:
    <script type=”text/javascript”>
    function SetReadOnly()
    var elements=document.getElementById(’4_ctl00_ctl00_TextField’);
    elements.readOnly=true;
    _spBodyOnLoadFunctionNames.push(“SetReadOnly()”);
    </script>
    But I am not sure where to put the code in. Should I put it in the space in Content Editor Web Part,
    or through a link to a txt file, or in "Edit HTML"? I've tried them but none works.
    Thanks a lot!
    Patrick

    You can try this:
    1) Open your Sharepoint List. Go to List edit view.
    2) On right side of Ribbon you will find "Form Web Parts" option as shown in figure.
    3) Choose your List form which you want to edit.
    4) Now you can add web part in new window.
    5) Add Content Editor Web part.
    6) In content editor web part add the path of your "txt" file in which you have written your script, for eg.
    <!DOCTYPE html>
    <html>
    <body>
    <script type=”text/javascript”>
    function SetReadOnly()
    var elements=document.getElementById('4_ctl00_ctl00_TextField');
    elements.readOnly=true;
    _spBodyOnLoadFunctionNames.push("SetReadOnly()");
    </script>
    </body>
    </html>
    I haven't tried this method so I am not sure but hope it works...:D
    ***If my post is answer for your query please mark as answer***
    ***If my answer is helpful please vote***

  • Why are many of my toolbar bookmarks suddenly missing, & why can't I designate where to put bookmarks now? Star won't accept double-clicks anymore.

    All of a sudden yesterday I can no longer click the star twice to tell it where to put the bookmark, and even when I click it once it doesn't save the bookmark anywhere. Also many of my toolbar bookmarks are now suddenly missing. I've tried to restore bookmarks and it says it's unable to perform that function. Help!

    You can check for problems with the <b>places.sqlite</b> database file in the Firefox profile folder.
    *http://kb.mozillazine.org/Bookmarks_history_and_toolbar_buttons_not_working_-_Firefox
    *https://support.mozilla.org/kb/Bookmarks+not+saved#w_fix-the-bookmarks-file
    *Places Maintenance: https://addons.mozilla.org/firefox/addon/places-maintenance/

  • Function Module working only in debug mode

    Hi all,
    The following Function Module works only in debug mode. The purpose of this FM is to create a notification and to put it in progress status. If I put a breakpoint before "CALL FUNCTION 'BAPI_ALM_NOTIF_PUTINPROGRESS'" it works. If I execute this FM without putting a breakpoint at that place it creates the notification but doesnt put it in progress status.
    In other words, the last BAPI call doesnot work if I dont put a breakpoint before.
    Can somebody help me to find out where is the problem?
    Thanks,
    Younes
    FUNCTION ZFM_CREATE_NOTIF_IN_PROCESS.
    ""Local interface:
    *"  IMPORTING
    *"     VALUE(NOTIFTYP) TYPE  CHAR2
    *"     VALUE(NOTIFHEADER) TYPE  BAPI2080_NOTHDRI
    *"  EXPORTING
    *"     VALUE(NOTIFNUMBER) TYPE  CHAR12
    *"     VALUE(NOTIFCURSTATUS) TYPE  CHAR40
    DATA: gs_bapi2080_nothdre TYPE bapi2080_nothdre,
          gt_return TYPE TABLE OF bapiret2.
    The notification is created with a temporary number
    CALL FUNCTION 'BAPI_ALM_NOTIF_CREATE'
      EXPORTING
        notif_type         = NOTIFTYP
        notifheader        = NOTIFHEADER
      IMPORTING
        notifheader_export = gs_bapi2080_nothdre
      TABLES
        return             = gt_return.
    READ TABLE gt_return TRANSPORTING NO FIELDS WITH KEY type = 'E'.
    CHECK sy-subrc IS NOT INITIAL.
    *The notication will be saved with a number which isnt temporary
    CALL FUNCTION 'BAPI_ALM_NOTIF_SAVE'
      EXPORTING
        number      = gs_bapi2080_nothdre-notif_no
      IMPORTING
        notifheader = gs_bapi2080_nothdre
      TABLES
        return      = gt_return.
    READ TABLE gt_return TRANSPORTING NO FIELDS WITH KEY type = 'E'.
    CHECK sy-subrc IS NOT INITIAL.
    CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'.
    The Notif is already created, it will be put in progress status
    NOTIFNUMBER = gs_bapi2080_nothdre-notif_no.
       CALL FUNCTION 'BAPI_ALM_NOTIF_PUTINPROGRESS'
            EXPORTING
              NUMBER             = NOTIFNUMBER
              LANGU              = SY-LANGU
           IMPORTING
             SYSTEMSTATUS       = NOTIFCURSTATUS
           TABLES
             RETURN             = gt_return.

    Hi Emmanuel,
    Now I get your problem: you want to wait to have the commit finished! The call to BAPI_TRANSACTION_COMMIT has an optional parameter 'WAIT' which is space by default which causes only a commit. When you set this parameter to 'X' it will do a commit work and wait.
    This should solve your problem!
    Regards,
    John.

  • JUnit, where to put my unit test

    Hi all,
    I have a question regarding unit test.
    I am working on a project which has multiple packages. I need to unit test every package using JUnit. One question I have is where to put my unit test. The options are:
    1. Write unit test as a separate package. This makes the code clear but only the public functions get tested or I have to make all functions public.
    2. Write unit test in the same package of the code to be tested. This makes writing test easier but putting test and code together makes the structure dirty.
    Please let me know your opinion and tell me how do you normally do this?
    Many thanks,
    Regards,
    Kevin

    It sounds like you're probably a beginner, so this might be overkill, but here goes anyway: You might want to investigate Maven, which defines a standard directory structure that includes a test tree separate from the production tree, but yet still in the same overall folder. The beauty of this design is that you can keep both production & test code together in source control, IDE projects, etc. but they don't interfere with each other.
    Even if you don't use Maven now, you might want to consider using their standard directory structure, as it is has stood the test of time, & would facilitate using Maven if you ever decide to in the future.

  • Oracle 9i function to perform data manipulation

    Hi everyone,
    I have two scenarios. I would like to write one Oracle 9i function that can accommodate both these scenarios, using PL/SQL developer. I intend passing a varchar2 parameter to this function. Within the function, I perform a select on a table and see if this value sent has a parent record.
    If it does not have a parent record (null or blank) then I take this value, join with another table, perform some processing and return one varchar2 value.
    If it has a parent record (not null or not blank) then I need to retrieve all the other children records associated with this same parent record, take this value, join with another table,perform some processing and return one varchar2 value.
    I have two simple queries that I wrote: one for record with null/blank parent, and the other for record with same parent and other children. These two queries work individually, when I combine them is where I run into problems. Sample table:
    TABLE XYZ data: (note: if there is a parent, parent shows up in both parent and child field in the table)
    child parent
    1234
    5107 3167
    6259 3652
    5678 9754
    3167 3167
    3652 3652
    1649
    2306 9754
    4657 3652
    9754 9754
    8753 3652
    passing record 1234 into the function.
    SELECT A.child, A.parent, C.field1
    FROM OTHERTABLE C,
    (SELECT TableA.child, TableA.parent
    FROM XYZ TableA
    WHERE TableA.child ='1234')A
    WHERE A.child = C.field2
    ----(output of this query is 1 record with 3 fields 1234 and null/blank and 987654321. I place this output into a cursor and then take 987654321 and place into a variable and return this value)
    passing record 4657 into the function
    SELECT c.CHILDfield, c.PARENTfield, TableOther.field1
    FROM OTHERTABLE TableOther,(
    (SELECT B.CHILDfield, B.PARENTfield FROM
    (SELECT A.PARENTfield, i.CHILDfield FROM TableB,
    (SELECT TableA.CHILDfield, TableA.PARENTfield
    FROM XYZ TableA
    WHERE TableA.CHILDfield ('4657' ))A
    -- pass 4657 and then get the parent
    WHERE A.PARENTfield = TableB.PARENTfield)B
    -- gets associated children with the parent from previous query.
    -- note: parent can exist in the parent and child fields
    WHERE B.CHILDfield <> B.PARENTfield))C
    --strips off the parent and gets child/children only as I don't need
    --the parent when it is also a child
    WHERE C.CHILDfield = TableOther.field1
    --(output of this query is 3 records
    4657 3652 912345671
    6259 3652 945362798
    8753 3652 934274857)
    I place this output into a cursor and then have a CASE statement that goes thru each record, and appends the third value into a variable, the ultimate return value of this will be as follows:
    912345671;945362798;934274857)
    The dilemma is writing a generic query to accommodate both these situations. My current function can handle each of these situations individually, but not both. For testing purposes, I change the select statement depending on whether I have a record that has a parent on not!
    Any help is greatly appreciated.

    You want one function to handle two cases? This is the best opportunity to use the IF STATEMENT.
    FUNCTION MyFunc (p_input IN VARCHAR2) RETURN VARCHAR2 IS
    ReturnValue VARCHAR2;
    BEGIN
    IF <blank or null test> THEN
    SELECT ... -- Blank or null select statement
    ... -- Blank or null data processing
    RETURN ReturnValue;
    ELSE
    SELECT ... -- Other select statement
    ... -- Other data processing
    RETURN ReturnValue;
    END IF;
    END MyFunc;

  • Where condition on a function

    Hello,
    I'm having little troubles while writing a query for which is needed a where condition on a function.
    Here a little example:
    select id_vehicle from vehicle_list where id_user = 1 and function(id_vehicle) = 1;
    that function is using locator (quite heavy).
    as I would like to execute the function just for the id_user = 1 and not for the whole table (like it seemed it does in the privous query) I tried this second:
    select id_vehicle from (select id_vehicle from vehicle_list where id_user = 1) where function(id_vehicle) = 1;
    Nothing changed, neither the execution explain.
    Finally I found this syntax, that works as I would:
    select id_vehicle from vehicle_list where id_user = 1 group by id_vehicle having function(id_vehicle) = 1;
    Is this the only solution to achieve my goal?
    Thanks in advance,
    Samuel Rabini

    Karthick_Arp wrote:
    Samuel Rabini wrote:
    Hello,
    I'm having little troubles while writing a query for which is needed a where condition on a function.
    Here a little example:
    select id_vehicle from vehicle_list where id_user = 1 and function(id_vehicle) = 1;
    that function is using locator (quite heavy). Locator? I don't get you what is that? Probably some geo/spatial stuff.
    >
    as I would like to execute the function just for the id_user = 1 and not for the whole table (like it seemed it does in the privous query) I tried this second:
    select id_vehicle from (select id_vehicle from vehicle_list where id_user = 1) where function(id_vehicle) = 1; For oracle both the query are the same. Search the document for predicate pushing and read it.
    You are in a wrong assumption that the function is applied for all the row in the table. Its only applied on the rows for which id_user is 1. How to check it? just pas id_user as and parameter to the function and print it in the function. You will get to know that. not always. it depends on many factors. The CBO might decide that the condition with the function will return less values then the id_use=1 condition. Therefore it might choose to execute the function first. An execution plan including join predicates would also show this.
    There are some ways to influence the optimizers behaviour regarding function. One is to make it deterministic (if possible). Also one could give addition info to the optimizer about the function. Dynamic sampling could also be helpful, altough I'm not so sure in this case.
    I myself would prefer to write the query in such a way that the optimizer is forced to execute it as late as possible.
    There are different ways how to do this.
    Using a subquery and a sort operation (order by, group by ) is one. That's why it was working for the op. Problem is this additional sort operation has its own performance cost.
    Using COALESCE can be another way. It might be difficult rewrite the query in this case. But coalesce is one of the few commands (or the only one?) where the second parameter is not executed if the first one is fulfilling the condition.
    Last but not least you can use hints to prevent the subquery rewriting.

  • Where to put java code - Best Practice

    Hello. I am working with the Jdeveloper 11.2.2. I am trying to figure out the best practice for where to put code. After reviewing http://docs.oracle.com/cd/E26098_01/web.1112/e16182.pdf it seemed like the application module was the preferred spot (although many of the examples in the pdf are in main methods). After coding a while though, I noticed that there were quite a few libraries imported, and wondered whether this would impact performance.
    I reviewed postings on the forum, especially Re: Access service method (client interface) programmatically . This link mentions accessing code from a backing bean -- and the gist of the recommendations seems to be to use the data control to drag it to the JSF, or use the bindings to access code.
    My interest lies in where to put java code in the first place; In the View Object, Entity Object, and Am object, backing bean.....other?
    I can outline several best guesses about where to put code and the pros and cons:
    1. In the application module
    Pros: Centralized location for code makes development and support more simple as there are not multiple access points. Much like a data control centralizes services, the application module can act as a conduit for different pieces of code you have in objects in your model.
    Cons: Everything in one place means the application module becomes bloated. I am not sure how memory works in java -- if the app module has tons of different libraries are they all called when even a simple query re-execute method is called? Memory hog?
    2. Write code in the objects it affects. If you are writing code that accesses a view object, write it in a view object. Then make it visible to the client.
    pros: The code is accessed via fewer conduits (for example, I would expect that if you call the application module from a JSF backing bean, then the application module calls the view object, you have three different pieces of code --
    conts: The code gets spread out, harder to locate etc.
    I would greatly appreciate your thoughts on the matter.
    Regards,
    Stuart
    Edited by: Stuart Fleming on May 20, 2012 5:25 AM
    Edited by: Stuart Fleming on May 20, 2012 5:27 AM

    First point here is when you say "where to put the java code" and you're referring to ADF BC, the point is you put "business logic java code" in the ADF Business Components. It's fine of course to have Java code in the ViewController layer that deals with the UI layer. Just don't put business logic in the UI layer, and don't put UI logic in the model layer. In your 2 examples you seem to be considering the ADF BC layer only, so I'll assume you mean business logic java code only.
    Meanwhile I'm not keen on the term best practice as people follow best practices without thinking, typically best practices come with conditions and people forget to apply them. Luckily you're not doing that here as you've thought through the pros and cons of each (nice work).
    Anyway, back on topic and off my soap box, as for where to put your code, my thoughts:
    1) If you only have 1 or 2 methods put it in the AppModuleImpl
    2) If you have hundreds of methods, or there's a chance #1 above will morph into #2, split the code up between the AppModuleImpl, ViewImpl and ViewRowImpls. Why? Because your AM will become overloaded with hundreds of methods making it unreadable. Instead put the code where it should logically go. Methods that work on a specific VO row go into the associated ViewRowImpl, methods that work across rows in a VO go into the ViewImpl, and methods that work across VOs in the associated AppModuleImpl.
    To be honest which you ever option you choose, one thing I do recommend as a best practice is be consistent and document the standard so your other programmers know.
    Btw there isn't an issue about loading lots of libraries/imports into a class, it has no runtime cost. However if your methods require lots of class variables, then yes this will have a memory cost.
    On a side note if you're interested in more ideas around how to build ADF apps correctly think about joining the "ADF EMG", a free online forum which discusses ADF architecture, best practices (cough), deployment architectures and more.
    Regards,
    CM.

Maybe you are looking for

  • Viewing PR CS6 sequence on NTSC monitor?

    Hi, anyone know how I can view my PR CS6 sequence on my NTSC HD monitor? Thanks!!

  • Cursor in ORACLE FORMS 10g/6i

    Dear All Seniors Please tell me with complete example about CURSORS in ORACLE 10g/ 6i. i.e -> declaration ->opening -> fetching -> close etc Shall be very thankfull to him. thanks in advance yassen

  • IBooks Author gallery widgets appearing black

    I'm currently trying to make an iBook document however when I click on some of the gallery widgets to make them come up full screen they are just black. Also all of the options such as fill, opacity etc are grey and cannot be changed on these ones th

  • PI7.1 Sample Adapter

    I created a simple scenario utilizing sample adapter (JCA) to see how it works. It's PI7.1. The sender side works fine but i got this error message in the receiver side: Adapter Framework caught exception: Cannot lookup the ra connectionFactory. Reas

  • Photoshop Elements 4.0 - Bildschirmgrösse

    Habe eben das neue Produkt installiert. Leider stimmt die Grösse der Fenster nicht mit dem Bildschirm überein. Es fehlt unten und auf der rechten Seite relativ viel Text. Was machen?