Conditional Display/Bind Variables

Hi
Is there a way to conditionally display a region on a page, without binding to an SQL variable.
Example: display the region only when the hidden item has a certain value assigned to it.
How do I assign a variable to the hidden item?
I've tried assigning a default value to the item 'my_item' as 'p233_region1'
And then I tried conditionally displaying the region using item = value, :my_item = 'p233_region1'
This didn't work ...
Any suggestions?
Thanks
Kezie

I'll explain as follows:
Assume there are 2 pages in the app.
Page 1 has 3 regions (A1, B1 & C1) which display statistical summaries
Page 2 also has 3 regions (A2, B2, C2) which display the child detail view of the equivalent parent summaries on page 1
The 'drill in' link from page 1, to page 2, is a link to page 2
e.g. f?p=&APP_ID.:2:#APP_SESSION#:
Accordingly, if I drill from A1 to A2, I will see the detail view of A2, as well as, B2 and C2. That is, B2 and C2 display as well because I have not used a bind variable to bind to the sql in a specific region.
My objective, is to display only A2 on page 2, when I drill from A1 on page 1.
Essentially, I am trying to get around having to create multiple pages to display the drill detail of each region, by using conditional display on one page.
Hope this is clearer.
Thanks
Kezie

Similar Messages

  • Conditionally Setting Bind Variables

    I need help conditionally setting some bind variables so I don't have to hard code some values. However, I get errors when I try to do this. I might just be going about it the wrong way. This is my code so far:
    DECLARE
           first_offset varchar2(3);
           second_offset varchar2(3);
           current_term  varchar2(6);
    BEGIN
      current_term := (SELECT robinst_current_term_code
      FROM robinst
      WHERE robinst_aidy_code = :aidy)
      CASE
      WHEN current_term LIKE '%60' THEN first_offset := '40'
      AND second_offset := '100'
      WHEN current_term LIKE '%20' THEN first_offset := '100'
      AND second_offset := '160'
      END
    END;
    /I want to then use the offest variables in a select query afterwords. Is this possible, or what do I appear to be doing wrong?
    Edited by: blackhole82 on Jan 23, 2009 2:01 PM
    Edited by: blackhole82 on Jan 23, 2009 2:07 PM

    This works when I run it in toad:
    VARIABLE first_offset varchar2(3)
    VARIABLE second_offset varchar2(3)
    VARIABLE current_term  varchar2(6)
    BEGIN
      SELECT robinst_current_term_code
      INTO current_term
      FROM robinst
      WHERE robinst_aidy_code = :AIDY;
    first_offset := CASE 
      WHEN current_term LIKE '%60' THEN '40'
      WHEN  current_term LIKE '%20' THEN '100'
      END;
      second_offset := CASE
      WHEN current_term LIKE '%60' THEN '100'
      WHEN current_term LIKE '%20' THEN '160'
      END;
    END;
    SELECT spriden_id id, spriden_last_name||', '||spriden_first_name name
    FROM spriden
    WHERE spriden_pidm IN(
    SELECT DISTINCT(RCRESAR_PIDM)
    FROM RCRESAR A,RCRAPP1,SGBSTDN,SORLCUR, RCRAPP2, ROBINST
    WHERE  (RCRESAR_PELL_ELGBL = 'Y')
    AND   RCRAPP1_BIRTH_DATE <= (SELECT trunc(sysdate) - interval '25'year  from dual)
    AND   RCRAPP1_CITZ_IND='1'
    AND   RCRAPP1_CURR_REC_IND='Y'
    AND   RCRAPP1_INFC_CODE = 'EDE'
    AND   SGBSTDN_STYP_CODE = 'C'
    AND   SGBSTDN_STST_CODE = 'AS'
    AND SGBSTDN_LEVL_CODE = 'UG'
    AND  (SORLCUR_DEGC_CODE LIKE 'B%'
    OR   SORLCUR_DEGC_CODE LIKE 'A%')
    AND   SORLCUR_CACT_CODE='ACTIVE'
    AND ((RCRAPP2_C_DEPEND_STATUS='2'
    AND  (RCRAPP1_STAT_CODE_RES='LA'
    OR   RCRAPP1_PAR_STAT_CODE_RES='LA'))
    OR  (RCRAPP2_C_DEPEND_STATUS='1'
    AND   RCRAPP1_STAT_CODE_RES='LA'))
    AND F_ENROLLED_THIS_TERM(RCRESAR_PIDM, :current_term - :first_offset) = 'Y'
    AND MSU_ENROLLED_HISTORY_TERM(RCRESAR_PIDM, :current_term - :second_offset) = 'Y'
    AND NOT EXISTS (SELECT 'X'
    FROM RPRAWRD
    WHERE RCRESAR_PIDM = RPRAWRD_PIDM
    AND RCRESAR_AIDY_CODE = RPRAWRD_AIDY_CODE
    AND RPRAWRD_FUND_CODE LIKE 'GO%') 
    AND RCRAPP1_PIDM         = RCRESAR_PIDM
    AND SGBSTDN_PIDM         = RCRESAR_PIDM
    AND SORLCUR_PIDM         = RCRESAR_PIDM
    AND RCRAPP2_PIDM         = RCRESAR_PIDM
    AND RCRESAR_INFC_CODE    = RCRAPP1_INFC_CODE
    AND RCRESAR_SEQ_NO       = RCRAPP1_SEQ_NO 
    AND RCRAPP2_INFC_CODE    = RCRAPP1_INFC_CODE
    AND RCRAPP2_SEQ_NO       = RCRAPP1_SEQ_NO
    AND RCRAPP1_AIDY_CODE    = RCRESAR_AIDY_CODE       
    AND RCRAPP2_AIDY_CODE    = RCRESAR_AIDY_CODE
    AND ROBINST_AIDY_CODE    = RCRESAR_AIDY_CODE
    AND RCRESAR_AIDY_CODE    = :AIDY
    /*AND RCRESAR_PIDM = :PIDM */
    INTERSECT
    SELECT rprawrd_pidm
    FROM rprawrd
    WHERE rprawrd_fund_code = 'PELL'
    AND rprawrd_offer_amt > 0
    AND rprawrd_aidy_code = :AIDY
    INTERSECT
    SELECT rprawrd_pidm
    FROM rprawrd
    WHERE rprawrd_fund_code LIKE 'GO%'
    AND rprawrd_paid_amt > 0
    AND rprawrd_aidy_code <> :AIDY
    AND spriden_change_ind IS NULL
    ORDER BY nameBut it prompts me for my bind variables: current_term, first_offset, and second_offset. If I don't type in values I get no rows returned. When I type in what should be getting set in my pl/sql block it works fine. What could be the problem now? The purpose of the variables is to not to have to type anything.
    Edited by: blackhole82 on Jan 23, 2009 3:28 PM

  • Query don't use the right index when using bind variables

    Hi people !
    I need some help because I have an issue with a query that don t use the right Indexes as it should
    First of all, I have mainly three tables :
    ORDER : Table that contains description for each Order (approximately 1 000 000 Records)
    ORDER_MVTS : Table that contains the tasks made (called movements) to set up each Orders
    with quantity of packages prepared for each product (approximately 10 000 000 Records)
    PRODUCT : Tables that contains the products (approximately 50 000 Records)
    When I launch the query with hard coded values, it brings back response very fast
    because it uses the right index (ORDER_DHR_VALID) which represent the date and hour of the order
    (with format 'DD/MM/YYYY HH24:MI:SS'). The selectivity for this index is good.
    NB 1: I have to use the trick " >= Trunc(date) and < trunc(date) +1 " to filter on a simple date because
    the index contains hour and minutes (I know it wasn't probably a bright idea at conception time).
    NB 2: The index on ORDER_MVTS.PRODUCT_CODE is'nt discriminating enough because there is'nt enough different products.
    It's the same for index on CUSTOMER_CODE and on MVT_TYPE so only the index on ORDER.DHR_VALID is good.
    Here is the correct explain plan when I execute the query with hard coded values :
    SELECT SUM(ORDER_MVTS.NB_PACKAGE)
    FROM ORDER_MVTS, PRODUCT, ORDER
    WHERE ORDER.DHR_VALID >= TRUNC(to_date('14/11/2008 10:04:56','DD/MM/YYYY HH24:MI:SS'))
    AND ORDER.DHR_VALID < TRUNC(to_date('14/11/2008 10:04:56','DD/MM/YYYY HH24:MI:SS')) + 1
    AND ORDER_MVTS.MVT_TYPE = 'DELIVERY'
    AND PRODUCT.CODE = ORDER_MVTS.PRODUCT_CODE
    AND ORDER_MVTS.ORDER_CODE = ORDER.CODE
    AND ORDER.CUSTOMER_CODE = 'ADIDAS'
    AND PRODUCT.CODE = 1234
    Rows Row Source Operation
    1 SORT AGGREGATE
    2 NESTED LOOPS
    4 NESTED LOOPS
    2 INDEX UNIQUE SCAN (object id 378548) --> PRODUCT_PK
    4 TABLE ACCESS BY INDEX ROWID ORDER
    777 INDEX RANGE SCAN (object id 378119) --> ORDER_DHR_VALID
    2 TABLE ACCESS BY INDEX ROWID ORDER_MVTS
    30 INDEX RANGE SCAN (object id 377784) --> ORDER_MVTS_ORDER_FK
    Now the problem is when the query is used in a Cursor with bind variables.
    It seems like Oracle don't use index on ORDER.DHR_VALID because he can't figure out that he have
    to actually filter on a short period of time (only one day).
    So Oracle uses the index on ORDER_MVTS.PRODUCT_CODE which is'nt a bright idea (it takes 10 secondes instead of just one)
    Here is the bad explain plan :
    Rows Row Source Operation
    1 SORT AGGREGATE
    2 NESTED LOOPS
    722 NESTED LOOPS
    2 INDEX UNIQUE SCAN (object id 378548) --> PRODUCT_PK
    722 TABLE ACCESS BY INDEX ROWID ORDER_MVTS
    1790 INDEX RANGE SCAN (object id 377777) --> ORDER_MVTS_PRODUCT_FK
    2 TABLE ACCESS BY INDEX ROWID ORDER
    1442 INDEX UNIQUE SCAN (object id 378439) --> ORDER_PK
    Now I have found two solutions to this problem :
    1) using a Hint to force the use of index on ORDER.DHR_VALID (with /*+ INDEX(ORDER ORDER_DHR_VALID) */ )
    2) Using Dynamic SQL and keeping the date hard coded (but not the other values except mvt_type)
    For example :
    QUERY :=
    'SELECT SUM(ORDER_MVTS.NB_PACKAGE)
    FROM ORDER_MVTS, PRODUCT, ORDER
    WHERE ORDER.DHR_VALID >= TRUNC(TO_DATE('''||To_char(P_DTE_VAL,'DD/MM/YYYY')||''',''DD/MM/YYYY'')) '||
    AND ORDER.DHR_VALID < TRUNC(TO_DATE('''||To_char(P_DTE_VAL,'DD/MM/YYYY')||''',''DD/MM/YYYY'')) + 1 '||
    AND ORDER_MVTS.MVT_TYPE = 'DELIVERY'
    AND PRODUCT.CODE = ORDER_MVTS.PRODUCT_CODE
    AND ORDER_MVTS.ORDER_CODE = ORDER.CODE
    AND ORDER.CUSTOMER_CODE = :CUSTOMER
    AND PRODUCT.CODE = :CODE ';
    These two solutions work but Number 1 is bad in theory because it uses a Hint
    and Number 2 may be difficult to code.
    So my question is : Does someone knows another solution to force the use of index ORDER_DHR_VALID that can be simple and reliable.
    Thank you very much for support
    Edited by: remaï on Apr 1, 2009 4:08 PM

    What version of oracle you have? CBO work is different in 9i and 10g.
    Usually cost based optimizer do not want to use index for >< condition with binding variables because optimizer can not use statistic to determine selectivity, and by default selectivity of <> operators is low.
    (As I remember '>' selectivity by default is 5%, you have two conditions > and <, therefore resulting selectivity will be 0.05*0.05=0.0025 as two independent events, but selectivity of other conditions
    ORDER_MVTS.MVT_TYPE = 'DELIVERY' or ORDER.CUSTOMER_CODE = 'ADIDAS' looks much better for CBO)
    The best solution I see is do not use binding variables. Actually your query looks as searching query, which executes not so often, therefore you will not have perfomance win along of skipping execution plan creation.
    Edited by: JustasVred on Apr 1, 2009 10:10 AM

  • How to substitute a bind variable for a IN condition?

    Dynamically I am setting the WHERE condition for one of my blocks using SET_BLOCK_PROPERTY Built in. The condition that I am attaching has two IN conditons..
    For Eg.,
    contracts_tbl.status_col IN ('NEW', 'OLD', 'EXPIRED', 'OPEN')
    AND contracts_tbl.id_col IN (1, 2, 3, 4)
    The number of choices in the IN condition will vary depending upon the user choice in my screen. Because of this the parsed SQL state is could not be shared and multiple of these are getting created in shared pool. To avoid this I would like to use bind variables.
    There are two ways I am trying to do this..
    1. Generating one bind variable for each value. i.e.,
    contracts_tbl.status_cod IN (:global.var1, :global.var2,
    :global.var3)
    Now this could result it memory error if no. of choices exceeds the avilable memory. Also its a tedious task to purge the variables after querying the block. Also because of multiple IN conditions, the chances of different set of selections are possible and then again sharing will be minimal.
    2. The second method is to set the one bind variable for each IN condition. i.e.,
    :GLOBAL.Var1 := '( 'NEW', 'OLD', 'EXPIRED', 'OPEN' )';
    :GLOBAL.Var2 := '(1, 2, 3)';
    contracts_tbl.status_col IN :GLOBAL.Var1
    AND contracts_tbl.id_col IN :GLOBAL.Var2
    In this case, forms is not querying as the IN condition takes the global variable value as one string and the query returns no rows though there are plenty available for each status. Also any NUMBER type condtions erroring out as the , and ( are invalid numerals.
    Q: Is there anyway you can make this work? or Is there any other better method to substitute bind variables in place to avoid creating new set of statements for each query in the shared pool?
    Your suggestions and pointers are higly appreciated. Please respond immediately as this is a P1.
    Thanks,
    -- Raam.

    2. The second method is to set the one bind variable for each >>IN condition. i.e.,
    :GLOBAL.Var1 := '( 'NEW', 'OLD', 'EXPIRED', 'OPEN' )';
    :GLOBAL.Var2 := '(1, 2, 3)';
    contracts_tbl.status_col IN :GLOBAL.Var1
    AND contracts_tbl.id_col IN :GLOBAL.Var2 This method should work - not sure if you put exact syntax in or not but your first assignment would cause a problem as everywhere you want one ' mark you would have to put two so that it does not close your quoted string
    Try the following syntax:
    :GLOBAL.Var1 := '( ''NEW'', ''OLD'', ''EXPIRED'', ''OPEN'' )';
    :GLOBAL.Var2 := '(1, 2, 3)';
    SET_BLOCK_PROPERTY('blk name',
    default_where,
    'contracts_tbl.status_col IN ' || :GLOBAL.Var1
    || ' AND contracts_tbl.id_col IN ' ||
    :GLOBAL.Var2);
    Hope this helps,
    Candace Stover
    Forms Product Management

  • Display a binding variable in an included header

    All of my JSP´s have a header which is included using jsp:include. This include expects one parameter. The value of the parameter should be a binding variable.
    I tried the following:
    <c:set value="${bindings.EmtName}" var="emt" />
    <c:out value="${emt}" /> // Display the correct value
    <jsp:include page="header.jsp">
         <jsp:param name="headerTitle" value='${emt}' />
    </jsp:include>
    ${emt} does not work within jsp:include
    Any idea?

    Hi,
    ${emt} does not work because jsp tags can't accept Expression Language(EL).
    try this:
    <c:set value="${bindings.EmtName}" var="emt" />
    <c:out value="${emt}" /> // Display the correct value
    <jsp:include page="header.jsp">
    <jsp:param name="headerTitle"
    value='<%=pageContext.getAttribute("emt")%>'/>
    </jsp:include>

  • JDev 11.1.2.1 Execute method (with bind variable) before page is displayed

    Hi All,
    I have a view object with a query that uses a bind variable. I drag the data control onto my .jsf page to create a table. I create a query method on a view scope bean. The query method uses the contents of one of the bean's attributes to set the bind variable for the query:
    vo.setNamedWhereClauseParam("CraIdBindVar", sessionBean.getCraId());
    I place a button on the page that invokes the query method and it populates the table. This is fine but I don't want the user to have to click on the 'query' button when they navigate to this page. I have found forums that discuss creating an AMImpl.jave method, creating a binding on the page, creating an executable for the binding. This works in that the method is executed before the page is displayed. However, the AMImpl method cannot call sessionBean.getCraid() to get the necessary data item to populate the bind variable.
    Is there a way to execute my view scope bean method before the page is displayed? Or perhaps a way for the AMImpl.java method to access the view scope variable?
    Thanks, Steve

    Steve,
    you can drag a method call activity onto the task flow. Then select the new method call activity and open the property inspector. Here you select the method from your bean in the method property. Now you first navigate to this method call activity and then to the page.
    Timo

  • Query and bind variable display in reports

    I have created a reports portlet using the locally built providers facility with the create a new reports. It seems to work fine except that the sql query and the bind variables show up in the report along with the report itself. How do I keep these from showing up?? I am on Portal 9.04
    Ken Rubesh

    ON the Page displayoptions tab, you can select "Show Query Conditions?..
    is that unselected?
    if you are talking about the fields from your select statement showing up in the body of the report, you can set the field type to hidden on the 2nd tab(column formatting).
    hope this helps

  • Diferent display of bind variables

    When Iook at the statpack, I see a single statement with 2 different bind variables displayed:
    UPDATE ACCT SET ENT_ID = :0,ACCT_LOADED = :"SYS_B_0"
    WHERE ACCT_ID = :1
    Why do I see this diference?
    3rd party application in C++, OCI 9 calls on Ora 10.1.0.4, AIX5.3
    Thanks a lot, mj

    Hi,
    lots of perf problem whan using these cursor_sharing modesNot only perf problem, but wrong results too...
    For test, we have setting cursor_sharing to FORCE value, we have stop quickly after seen incoherence results...
    I have to say that was in Oracle 8i, but when I read the 10gR1 doc, I see some problem could exists :
    Forcing cursor sharing among similar (but not identical) statements can have unexpected results in some DSS applications, or applications that use stored outlines.
    From http://download-west.oracle.com/docs/cd/B14117_01/server.101/b10755/initparams033.htm#REFRN10025
    My 2 cents : if you decide to use FORCE value, you need to test 100% of your application...
    Nicolas.
    Message was edited by:
    N. Gasparotto

  • Detail view with bind variable. TreeTable not showing all detail result.

    I’m having trouble with treeTable using detail view with bind variables and where clause defined in VO definition.
    Both, master and detail view objects, base on the same entity and have the same condition in where clause. The view objects also have bind variables, which are set in prepareRowSetForQuery() method.
    Again, these are two different views, that get different result, based on value of one of the bind variable.
    When I show results in two different tables on jsf page, where master table has "RowSelection" set on "single", all results are displayed in detail table.
    But when I use treeTable, only the first result of the detail is shown.

    I tested it in applicationModule and it works, but i think that's the same as two tables on a jsf page.
    This is the order in which overridden methods are called in ADF BC or two tables on jsf page
    when clicking on row in master table.
    PrepareRowSetForQueryDetail
    executeQueryForCollection_Detail user param: 2
       Object 2: class [Ljava.lang.Object;  -> print of the object2[] parameter in executeQueryForCollection
         List 0: Bind_ChildId -> viewLink parameter
         List 1: 400035313 -> viewLink parameter value
    getEstimatedRowCount_Detail
    count: 2
    getEstimatedRowCount_Detail
    count: 2 And when i click on "expand node" in tree table:
    getEstimatedRowCount_Root
    count: 2
    PrepareRowSetForQuery_Detail
    executeQueryForCollection_Detail user param: 2
       Object 2: class [Ljava.lang.Object;
         List 0: Bind_ChildId -> viewLink parameter
         List 1: 400035321
    PrepareRowSetForQueryDetail
    executeQueryForCollection_Detail user param: 2
       Object 2: class [Ljava.lang.Object;
         List 0: Bind_ChildId -> viewLink parameter
         List 1: 400035313
    getEstimatedRowCount_Root
    count: 2
    getEstimatedRowCount_Root
    count: 2
    getEstimatedRowCount_Root
    count: 2
    PrepareRowSetForQueryDetail
    executeQueryForCollection_Detail user param: 2
       Object 2: class [Ljava.lang.Object;
         List 0: Bind_ChildId -> viewLink parameter
         List 1: 400035313
    PrepareRowSetForQueryDetail
    executeQueryForCollection_Detail user param: 2
       Object 2: class [Ljava.lang.Object;
         List 0: Bind_ChildId -> viewLink parameter
         List 1: 400035321
    getEstimatedRowCount_Root
    count: 2
    getEstimatedRowCount_Root
    count: 2Values of user parameters are OK. Is there another method that i should override?
    I also noticed, that if detail view doesn't have user bind variables, the tree works fine and is shown even in ADF BC (aplication module).
    I guess we loose a tree, when using bind variables in detail view object.
    Is there a way around it?

  • Bind Variable : required - no message, not required - error

    hi
    Please consider the example application created using JDeveloper 11.1.1.6.0
    at http://www.consideringred.com/files/oracle/2012/RequiredOrNotBVarApp-v0.01.zip
    It has these View Objects defined
    - EmployeesReqNoValueBVarVO which has a required Bind Variable, and where clause "last_name like '%' || :LastNameBVar || '%'"
    - EmployeesNotReqNoValueBVarVO which has a NOT required Bind Variable, and where clause "(:LastNameBVar is null or last_name like '%' || :LastNameBVar || '%')"
    The Bind Variable in both View Objects does NOT have a value (no default value, not programmatically set, not entered by the user, ...).
    This "no value set" aspect could be the result of a "development error", but the resulting observed behaviour is at least "peculiar".
    - scenario (sc1) : run "try tryEmployeesReqNoValueBVarVO", see a table filled with rows and NO message about the required Bind Variable
    - scenario (sc2) : run "try tryEmployeesNotReqNoValueBVarVO", see "No data to display." in the table and the "Missing IN or OUT parameter at index:: 1" error for the NOT required Bind Variable for a where clause that can deal with null values
    - question (q1) How can be explained that scenario (sc1) does not result in an error message about the required Bind Variable (and scenario (sc2) does result in an error message about the NOT required Bind Variable)?
    - question (q2) What does the "Required" checkbox for a Bind Variable really mean for Bind Variables used in a where clause of a View Object?
    If the described behaviour can be reproduced (using RequiredOrNotBVarApp-v0.01.zip), confirmations are welcome.
    (Aspects of these scenario's could be related to forum thread "Bind variable required/not required: strange behaviour".)
    many thanks
    Jan Vervecken

    Thanks for your reply Frank.
    Frank Nimphius wrote:
    ... your query actually is dependent on the existence of the bind variable because the bind variable is used in the where clause part. ...Sure, and the Bind Variable does exist (in both (sc1) and (sc2)).
    ... This has nothing to do with whether the bind variable value is checked for NULL and if the value it contains is NULL performs an "all you can eat" type of query. Because the existing, NOT required Bind Variable has not been given a value in scenario (sc2), the check for NULL only makes more explicit that NULL is a valid value for the SQL statement.
    ... Non required bind variables are used in the context of view criteria to avoid missing IN or OUT parameters. ...The "Required" checkbox for a Bind Variable is also available/enabled when the Bind Variable is not used in a View Criteria (in both (sc1) and (sc2)).
    ... In the case of a view criteria, the VO query may be executed without the view criteria applied and for this reason should not fail only because the defined bind variable is not provided. ...No View Criteria in the scenario's (sc1) and (sc2) I descirbe.
    ... If you run the query in the tester, you get
    (java.sql.SQLException) Missing IN or OUT parameter at index:: 1
    and no query is executed at all for EmployeesNotReqNoValueBVarVOSure, that matches scenario (sc2), but the Bind Variable can be configured as NOT required, how can it be missing?
    The JDeveloper help page "Create or Edit Bind Variables Dialog - Variable Page" says:
    "... Alternatively, you can use the SQL Statement page of the Edit View Objects dialog to enter a parameterized WHERE clause. Note that the bind variables you enter in a parameterized SQL WHERE clause will require a valid value at runtime or a runtime exception error will be thrown. ..."
    So, null as a valid value, seems to explain the behaviour in scenario (sc1).
    "... In contrast, when you create a view criteria filter condition that references a named bind variable, you can specify whether the value is required or optional. ..."
    But, the "Required" checkbox is also available (to uncheck) for Bind Variables that are not used in a View Criteria.
    Specifically for the "Required" checkbox the help page says : "... Select if you want to make the value of a name bind variable required for any usage the references the named bind variable. For example, when the value is required (default), all view criteria items that reference the named bind variable will fail to execute unless a valid value is supplied at runtime. Alternatively, you can leave the value not required and use the Create View Criteria dialog to specify whether or not individual view criteria items require the value. ..."
    Again, the focus is on View Criteria, although it can also be unchecked (configuring as NOT Required) for Bind Variables that are not used in a View Criteria (which does not seem to be something you should do).
    But, still, there is a perspective here that makes this possibly very confusing:
    - a View Object where clause with a required Bind Variable, no value set --> results in rows, and NO message about a missing value
    - a View Object where clause with a NOT required Bind Variable, no value set --> results in no rows, and a message about a missing value
    regards
    Jan

  • What can i replace this bind variable with in function?

    Hello
    I am creating a report showing training attended by employees. I have written a function to do the following:
    Parameters 1 - 4 is hard coded for a reason. So we dont worry about them.
    5th parameter: :START_DATE represents the date training started
    6th parameter: :END_DATE represents the date training ended.
    These date parameters are correctly used inside the select statement that the function is built upon. So don't worry that my date parameters are correct/incorrect.
    The focus should be on how you use bind variables inside Discoverer Admin. The select at the bottom runs perfectly in Toad and it allows you to use the date parameters as bind variables. But it does not allow it in Discoverer Admin
    The problem is with Parameter 5 and 6. I dont want to hard code the dates as i want the user to be able to enter his own date parameters.
    Discoverer Admin gives an error is i want to use :START_DATE and :END_DATE as parameters
    Does anyone have a solution for my problem.
    This is what the code looks like.
    SELECT apps.xxhr_fsc_training_info.xxhr_fsc_training ('A', '02','M', 'N',:START_DATE, :END_DATE)category_A_training
    , apps.xxhr_fsc_training_info.xxhr_fsc_training ('B', '02','M', 'N',:START_DATE, :END_DATE)category_B_training
    , apps.xxhr_fsc_training_info.xxhr_fsc_training ('C', '02','M', 'N',:START_DATE, :END_DATE)category_C_training
    , apps.xxhr_fsc_training_info.xxhr_fsc_training ('D', '02','M', 'N',:START_DATE, :END_DATE)category_D_training
    , apps.xxhr_fsc_training_info.xxhr_fsc_training ('E', '02','M', 'N',:START_DATE, :END_DATE)category_E_training
    , apps.xxhr_fsc_training_info.xxhr_fsc_training ('F', '02','M', 'N',:START_DATE, :END_DATE)category_F_training
    , apps.xxhr_fsc_training_info.xxhr_fsc_training ('G', '02','M', 'N',:START_DATE, :END_DATE)category_G_training
    from dual
    Edited by: iandekoker on Jun 8, 2009 9:34 PM

    Rod
    I have a request. The request is based on various emails written about passing parameters in Discoverer Admin/Desktop. Now if you are experienced and work with set copntext on regular basis then it should be a walk in the park. However if you are new to it like me, then it seems a daunting task. So my request is: Can't you provide us with an example of how to complete the whole process from begin to end using an actual example? I will kick off the process and maybe you can add where i left something out?
    Example:
    SELECT ENAME, HIRE_DATE
    FROM EMP
    WHERE HIRE_DATE = :IDATE;
    We want to run this select statement in Discoverer Admin, but Admin does not like the :IDATE bind variable. So now we are gonna use SET CONTEXT to find a solution to our problem.
    Step1:
    First we have to create a context namespace in the database for the Discoverer contexts. Here is the code to create the context. It is okay to also named your function EUL_DISCO as this name would work perfectly for almost everyone. Best is to do all of this in the Apps schema. Copy and paste this code in Toad and F9 it. It should compile successfully
    CREATE OR REPLACE CONTEXT eul_disco
    USING apps.eul_disco;
    Step 2:
    Now you need to create a package to enable you to set and retrieve contexts from in Discoverer. Here is the code to create the package and package body. Just copy and paste the code into Toad and F9 (execute) it to create the package.
    --Package Spec
    CREATE OR REPLACE PACKAGE eul_disco AS
    FUNCTION set_context(p_name VARCHAR2, p_value VARCHAR2) RETURN VARCHAR2;
    FUNCTION show_context(p_name VARCHAR2) RETURN VARCHAR2;
    END eul_disco;
    --Package Body
    CREATE OR REPLACE PACKAGE BODY eul_disco IS
    FUNCTION set_context(p_name VARCHAR2, p_value VARCHAR2)
    RETURN VARCHAR2 AS
    BEGIN
    dbms_session.set_context('EUL_DISCO', p_name, p_value);
    RETURN p_value;
    END set_context;
    FUNCTION show_context(p_name VARCHAR2)
    RETURN VARCHAR2 IS
    BEGIN
    RETURN SYS_CONTEXT('EUL_DISCO', p_name);
    END show_context;
    END eul_disco;
    Step3:
    Once you have created this package successfully you need to log into Discoverer Admin. Then use the menu to navigate to Tools > Register PL/SQL Function. A window called 'PL/SQL Functions' will appear. Select the 'Import...' button. A new window called 'Import PL/SQL functions' will appear. Scroll down until you see set_context function. Once you found it click OK to import it to End User Layer. Do the same to import show_context function. Remember there are two functions and you need to import them both. When you are done, click 'Apply' button. Then click 'OK' button. You can double check to make sure your functions have been imported. Just nagivate to Tools > Register PL/SQL function again. When the window 'PL/SQL Functions' appears your function(s) should be in the list on the left hand site. Scroll down untill you find them.
    Step4:
    Now it is time to set your session parameters in a separate worksheet inside Discovere Desktop from your main reports. The following steps show you how to create a worksheet to define an effective date parameter. The parameter worksheet should be based on a folder that always returns exactly one row.
    Log into Discoverer Admin. Open the Business Area you want to use. Then create "New Custom Folder..."
    Copy and paste this code (select sydate from dual) inside the New Custom Folder and validate the code. Also rename your folder to 'Set Context Folder'
    Step 5
    Next log into Discoverer Desktop and choose 'Create New Workbook'. Then choose table layout option. In the available list choose 'Set Context Folder'. When you have highlighted 'Set Context Folder' click on '>' button. Then click then 'Finish' button. Once the workbook is created you will see 1 column called Sysdate and a row with today's date in it. Save this workbook and name this workbook XYZ. You might even rename the sheet to QWE.
    Step 6:
    Still in Desktop working on XYZ workbook on QWE sheet, click on Tools > Parameters > New. In the 'Name' field enter START_DATE. Next leave 'Create condition with operator' box unticked. Next in 'Prompt' field enter START_DATE. In 'Description' field enter START_DATE. In 'Default' field enter NULL. Click OK button when you are done.
    Step 7:
    Still in Desktop working on XYZ workbook on QWE sheet, click on Tools > Calculation > New. Click on 'Functions' radio button. Then click on 'Database' folder to expand it. Scroll down till you see 'Set Context' function in the list. Select it and click 'paste >>' button. It will now show: SET_CONTEXT(P_NAME, P_VALUE). Now you need to replace the two parameters (P_NAME, P_VALUE) of the function. Replace P_NAME with 'START_DATE'. When you are done click on Items radio button. Then click on the Parameters folder and select Start_Date.
    When you are done it should look like this: SET_CONTEXT('START_DATE',TO_CHAR(:START_DATE))
    You might want to rename this calculation to START_DATE
    Ps. If you need to create two date parameters START_DATE and END_DATE then you repeat step 7 cause you need one more calculation.
    Just replace START_DATE with END_DATE. You also might want to call this second calculation END_DATE. Thus when you are done you will have 2 calculations:
    SET_CONTEXT('START_DATE',TO_CHAR(:START_DATE))
    SET_CONTEXT('END_DATE',TO_CHAR(:END_DATE))
    This is useful when you want date parameters similar to: 'where date between :Start_date and :End_date'
    Step 8:
    When you now run the XYZ workbook (QWE sheet) it will prompt you for an START_DATE. Enter 10-Jun-2009 (make sure the format you enter the date is similar to the format you have set up in discoverer). Now your XYZ workbook have 2 columns. First column is still called Sysdate with today's date. The second column is called START_DATE with 10-JUN-2009 in it.
    Step 9:
    Now you want to remove the 'SELECT SYSDATE FROM DUAL' data stored in 'SET CONTEXT FOLDER' from your XYZ workbook (QWE sheet) as you no longer need that. Still working with Desktop inside XYZ workbook on QWE sheet > click on Sheet menu option > then Edit Sheet option. On the Select Items tab click on 'Set Context Folder' and click < button to remove the folder from workbook XYZ. Click OK when done and run the workbook XYZ (sheet QWE) again. Now the workbook XYZ (sheet QWE) should only have one column called START_DATE and 10-Jun-2009 as the only row.
    Step 10:
    Rob you might want to come in here. It is also useful to create another calculation retrieving the value of the parameter, so that the value entered for the parameter can be seen when the workbook is run. Please give step by step instruction to complete this process
    Step 11:
    Still remember your initial problem where we wanted to use :IDATE in Discoverer Admin folder, but Discoverer Admin did not like the :IDATE syntax?
    SELECT ENAME, HIRE_DATE
    FROM EMP
    WHERE HIRE_DATE = :IDATE;
    Solution:
    Well now you just replace :IDATE with TO_DATE(SYS_CONTEXT('EUL_DISCO','START_DATE'))
    Log into Discoverer Admin. Open your Business Area. Then create 'New Custom Folder..'.
    Copy the code below and paste it into the new custom folder.
    Then validate the code.
    Rename the new custom folder to 'Solution'
    --copy and paste this code into folder 'Solution'
    SELECT ENAME, HIRE_DATE
    FROM EMP
    WHERE HIRE_DATE = TO_DATE(SYS_CONTEXT('EUL_DISCO','START_DATE'))
    note: 'EUL_DISCO' is the name of the context and package you created in step1
    : 'START_DATE' is the name of the calculation you did in step7
    Then log onto Discoverer Desktop > open your workbook XYZ > open sheet QWE.
    Click on Menu item called Sheet > New Sheet > choose Table layout > click next > scroll down available folders till you find SQL folder with then name 'Solution'. Select 'Solution' folder and click > then click Finish.
    The folder named 'Solution' will be used to populate the newly created sheet with data. You might want to rename the newly created sheet to 'Finally'.
    At this point workbook XYZ should have 2 sheets (QWE and Finally).
    Sheet 'QWE' contains the parameter and nothing else.
    Sheet 'Finally' displays the code found in folder 'Solution'
    First you run sheet QWE to set parameter. When prompt for a date enter '10-JUN-2009'. Click OK button.
    Then click on sheet 'Finally' to allow the parameter to take effect and do its job. You will see that only data true of 10-JUN-2009 are displayed
    Notes:
    This is a very simple example. But if you work thru this example, then you will get the concept behind the idea and would you be able to satisfy your own need.

  • [Solved] Named Bind Variables at Runtime - SQL WHERE clause issue

    Hey 'all,
    I've been having this issue today with a Search page using Named Bind Variables at Runtime for the search parameters for the WHERE clause in the view objects SQL.
    I've got everything working except for a clearing method which I've created so that the user can clear the current WHERE clause from the SQL statment and set it as 1=2 (so that it doesn't do a blind query on load).
    The method can clear and set the WHERE clause to 1=2 only when there is already one there.
    Below are the methods: (located in my view object class)
    public void findInvoiceById(Number invoiceId){
        setWhereClause("invoice_id = :P_INVOICE_ID");
        defineNamedWhereClauseParam("P_INVOICE_ID",null,null);
        setNamedWhereClauseParam("P_INVOICE_ID",invoiceId);
        executeQuery();
    public void clearCriteria(){
        setWhereClause("1=2");
        removeNamedWhereClauseParam("P_INVOICE_ID");
        executeQuery();
    }The error which I get is the following - this happens when the button is pressed twice in a row, or when no query has been passed previously.
    1. JBO-29000: Unexpected exception caught: oracle.jbo.NoDefException, msg=JBO-25058: Definition P_INVOICE_ID of type Variable not found in SupplierInvoicesView1
    2. JBO-25058: Definition P_INVOICE_ID of type Variable not found in SupplierInvoicesView1
    Any help with this would be greatly appreciated!
    Cheers,

    Hi Bonnie,
    we have it working ok, but still feel that there is room for improvement in the design.
    For us the key factors are:
    Pages based on the same view object that can be queried multiple ways.
    We don't want to put design time bind variables in because it limits the use of the VO
    We don't wan't multiple VO's with different where clauses.
    The page is displaying the same table columns and fields, but the where clause must be dynamic.
    We only want to query on the search field entered (some of our tables are massive)
    TopLink named queries are really what we are after, but we don't want to forgo all the other ADF BC functionality. The only examples of ViewCriteria in the developer guide had literals in the where clause and no bind variables. The View Criteria may still be an option, but it appeared quite complex compaired to directly adding and removing bind variables at runtime.
    a couple of footnotes:
    the following methods are used to clear the runtime variables prior to reusing the VO (thanks to John Stegman for the pointer on the exception handler):
        public void clearBindVariable(String bindVariableName){
            try
                removeNamedWhereClauseParam(bindVariableName);
            catch (NoDefException e)
        public void clearBindVariables(){
            clearBindVariable("P_INVOICE_ID");
            clearBindVariable("P_INVOICE_NUM");
            clearBindVariable("P_SUPPLIER_NAME");
            clearBindVariable("P_INVOICE_DATE_FROM");
            clearBindVariable("P_INVOICE_DATE_TO");
            clearBindVariable("P_SUPPLIER_NUMBER");
        }We are using 1=1 and 1=2 in the where clause to supress blind querying. 1=2 is applied when ever we are not explicitely searching for something. We had a problem with using the refresh condition ${adfFacesContext.postback == true} which I posted about here:
    executeQuery called twice using ${adfFacesContext.postback == true}
    Would still gladly hear other ideas on a better reuse design.
    regards,
    Brenden

  • Bind Variables in Chart

    I want to create a chart based on SQL query. SQL query involves a bind variable testdetid as follows:
    select
    null the_link,
    A.questionid Question,
    S.score Score
    from ELEARN.ANSWERS A, ELEARN.SOLUTIONS S
    where A.TESTDETAILID=:testdetid
    and A.solutionid = S.solutionid
    I want the value that is passed in the bind variable in my "Additional PL/SQL code" chart building wizard's page.
    In my Additional PL/SQL code I want to SQL access additional info. based on the testdetid bind variable.
    How can it be achieved? Is there any way in which bind variable can be shared across Chart building wizards.

    Furthermore, by using the same SQL, I can display chart in "HTML chart". But it does not work in SVGS and flash chart.
    I downloaded an example name "Sales Forecasting" from the packaged application and saw this application can display flash chart conditionally (the region within the flash chart has "conditional" word). after studying, I still have no idea how to do.
    Please help me solve the issue.
    Thanks.

  • Query regarding bind variables and LOVs

    HI,
    I am new to ADF.Last day I learnt about LOVS,View Criteria and bind variables.Now, I was trying to develop a sample application.I created some EOs,VOs and an AM.
    I also defined a view criteria which takes a bind variable as parameter and resolves the condition at runtime.Then I created a query panel based on my view criteria.In that Query Panel,when I enter a student's name in an input box(which is bound to the bind variable I guess), the info about the student is displayed in a table.Now, instead of an input box, I want a choice list based on a model driven LOV which will contain all the student names available.Is it possible in ADF 11g?
    Thanks in advance

    You need to open the VO , you are using , go to the Overview section and in overview section go to the Attributes section.
    In attributes section select the attribute by which you are searching or doing your operation, click the add button of List of values: Attribute name
    Select the vo object to populate the value.
    You will get the data in bind variable you have created in view criteria.
    For detailed reference you can follow the bolg
    http://saumoinak.blogspot.com/2011/02/showing-data-based-on-list-of-values.html

  • Getting bind variables

    I have created a report from a SQL query. It has a bind variable in the query. I use the customization page with an LOV to set the bind variable. All this works fine. Now I want to display the value from the display_column when the report is run. Showing the query conditions displays the numeric return value which won't make much sense to the user. How do I get the value of the bind variable so I can display it?
    Edited by: user478864 on Aug 31, 2010 12:12 PM

    I use get_value('p_parameter_name') in the "after displaying the header" section (on the Additional PL/SQL Code tab) of a portal report to display the value of a parameter (bind variable) so you could probably use that as a starting point for some plsql to query up the display name based on the value in get_value('p_your_parameter').
    DECLARE
    BEGIN
    htp.p(get_value('p_your_parameter'));
    END;

Maybe you are looking for

  • How to save output in a file

    My proggy import java.io.*; public class temp     public static void main (String [] args) throws Exception         DataInput keyboard = new DataInputStream (System.in);         int num = 0;         String temp;         String [] ques;         String

  • Facetime - camera light

    When I launch Facetime, the green light for my camera comes on immediately, even if I have Facetime turned off within the app.  I'm used to using Skype, Hangouts etc, where the light indicates that the camera is active and goes off when a call is ter

  • Nokia Lumia headphone mic sound BUG

     Ok. I have a Lumia 920 and a 620.  I use hands free texting and calling a LOT.  Both Phones worked perfectly at 1st with headphone microphones. I used the V-Moda V-80's, V-Moda Crossfade LP2, Marshall Major FX, Beats Mixr, Beats Studio, but i have o

  • Quarter Variable from Calendar Year/month

    Hi, Does anybody know how to get the quarter value from a selected calendar year/month (0calmonth) entered in the selection screen? Is there any standard variable for that? I don't want current quarter but the quarter that will come from the entered

  • Map app issue

    3gs map app in 5.1.1 works great, 4S and ipad 2 With 6.1 map dont work trying to give direction from point A to Point B..it will be fix? thanks