Last identity \ sequence value

Hello,
I have a little problem in some code I have written.
I have a database trigger that sequences rows for me on a transaction being entered into the database table.
However, as the return value of the procedure I have written I want this value to be returned.
How do I get the PK (eg sequence number) of the last record that was placed into the database table.
I am guessing that there is some form of sequence.last construct but I can't help being concerned by concurency issues (eg will the last sequence value always be the sequence that my trigger used)
Any advice will be gratefully recieved.
Regards

You'll have to figure out the details, but this is why Larry gave us the RETURNING clause.
SQL> CREATE TABLE apc1 (pk1 NUMBER, col1 NUMBER);
Table created.
SQL> CREATE SEQUENCE apc_pk;
Sequence created.
SQL> CREATE TRIGGER apc_bir BEFORE INSERT ON apc1 FOR EACH ROW
  2  BEGIN
  3     SELECT apc_pk.NEXTVAL INTO :NEW.pk1
  4     FROM   dual;
  5  END;
  6  /
Trigger created.
SQL> var x NUMBER
SQL> BEGIN
  2     INSERT INTO apc1 (col1)
  3     VALUES (32)
  4     RETURNING pk1 INTO :x;
  5  END;
  6  /
PL/SQL procedure successfully completed.
SQL> print x
         X
         1
SQL> SELECT * FROM apc1;
       PK1       COL1
         1         32
SQL> Cheers, APC

Similar Messages

  • Inserting sequence value from JDBC and getting the same value back

    Hi: Gurus I have a table whose primary key is a sequence. I wonder how to make sure I get the same sequence value back for current transaction so I update the other table whose foreign key is the sequence value from first table.
    E.g lets say I do this
    String query_insert = INSERT INTO table1 (column1, ....) VALUES (HIGHLIGHT_ID_SEQ.nextval, ...);
    pstmt = con.prepareStatement(query_insert);
    pstmt.executeUpdate();
    How I make sure no other transaction update the sequence value so I can read the last inserted sequence value and update the second table with this value
    String query_select = "SELECT HIGHLIGHT_ID_SEQ.currval FROM DUAL";
    pstmt = con.prepareStatement(query_select);
    Regards,
    Rashid.

    <rant>No version again. I wonder why people requiring help want to stay anonymous and never want to type their version, only 4 digits. In this case, jdbc, not only the version of the driver is important, but also it's type. Waving a magic wand again? </rant>
    Look up the returning into clause of the insert statement in the sql reference manual for your version.
    Sybrand Bakker
    Senior Oracle DBA

  • How to retrieve the value of last identity has been updated in a database?

    how to retrieve the value of last identity has been updated in a database

    Hi,
    Oracle 10g, FGA - Fine grained auditing, supports DML statements (9i only select).
    Set up FGA using the DBMS_FGA.ADD_POLICY procudure:
    sql> BEGIN
    DBMS_FGA.ADD_POLICY (
    policy_name => 'AUD_EMPLOYEE_SAL',
    object_schema => 'HR',
    object_name => 'EMPLOYEE',
    audit_column => SALARY',
    audit_condition => '',
    statement_type => 'UPDATE');
    END;
    NEXT:
    sql> SELECT dbuid, lsqltesxt FROM sys.fga_logs$;
    The database inserts the audit record into the FGA_LOG$ table using an autonomous transaction; even if you roll back the update statement, the update action will still be logged in this table. The fga_log$ tracks the session, machine id, timestamp, schema, scn, etc:
    SQL> desc fga_log$
    Name Null? Type
    SESSIONID NOT NULL NUMBER
    TIMESTAMP# DATE
    DBUID VARCHAR2(30)
    OSUID VARCHAR2(255)
    OSHST VARCHAR2(128)
    CLIENTID VARCHAR2(64)
    EXTID VARCHAR2(4000)
    OBJ$SCHEMA VARCHAR2(30)
    OBJ$NAME VARCHAR2(128)
    POLICYNAME VARCHAR2(30)
    SCN NUMBER
    SQLTEXT VARCHAR2(4000)
    LSQLTEXT CLOB
    SQLBIND VARCHAR2(4000)
    COMMENT$TEXT VARCHAR2(4000)
    PLHOL LONG
    STMT_TYPE NUMBER
    NTIMESTAMP# TIMESTAMP(6)
    PROXY$SID NUMBER
    USER$GUID VARCHAR2(32)
    INSTANCE# NUMBER
    PROCESS# VARCHAR2(16)
    XID RAW(8)
    AUDITID VARCHAR2(64)
    STATEMENT NUMBER
    ENTRYID NUMBER
    DBID NUMBER
    LSQLBIND CLOB
    SQL> spool off

  • ISE 1.0.4 - identity Sequence refuses to use AD after RSA

    We are running ISE 1.0.4 with a requirement that on the surface is simple, but fails to execute properly no matter how I tweak it it.  It is:
    VPN users either need to be within a certain AD group or
    They need to authenticate against RSA.
    I set authentication to use an identitysequence with RSA listed first, then AD second.
    I set authorization to check identity server (using network access:AuthenticationIdentityStore).
    - If it’s RSA, pass it.
    - If it’s Active directory, AND the condition with a check on that group membership.  Pass if both pass.
    - Set the default authorization rule to deny access.
    This should work.  Here’s where it breaks down.  It all stems from the fact that the same userIds exist in RSA and AD and that ISE steadfastly refuses to attempt the second identity server method listed in the sequence if RSA is listed first.
    •-          If I list RSA first and the “authentication failed” policy is set to Reject: 
    For users not in RSA that I want to authenticate against AD, it rejects – it attempts against RSA but never hits AD (second server listed in the Identity sequence).  This is what is broken
    This works for users in RSA
    •-          If I list the RSA server first and the “authentication failed” policy is set to continue
    Users not in RSA will pass authentication that shouldn’t because the network access:AuthenticationIdentityStore value will be pointing to the RSA server, regardless of whether they actually passed to that server or not.
    Effectively users can connect regardless of whether their password is right or not
    This option sets it to proceed from authentication to authorization
    •-          If I list AD first in the sequence Since the same ID exists in both AD and RSA, it’ll fail as bad password against AD.  It'll never attempt against RSA.
    Am I missing a simple fix for this?  I have a testbed in which I can simulate the issue but since I don’t have an RSA server handy, I’m using an identity sequence with AD and fallback to internal.  It works as I’d expect, falling back from AD to local if the user doesn't exist in AD.  If the user is in AD, it never tries local and shows the attempt as a bad password.

    There is a configuration option on the RSA server definition (Authentication Control options)
    This Identity Store does not differentiate between 'authentication failed' and 'user not found' when an authentication attempt is rejected. From the options below, select how such an authentication reject from the Identity Store should be interpreted for Identity Policy processing and reporting .
    Treat Rejects as 'authentication failed'
    Treat Rejects as 'user not found'
    If RSA is first server in sequence it will only continue to the next server if follwoing option is select "Treat Rejects as 'user not found'
    In addition you had a comment about the value of "network access:AuthenticationIdentityStore" attribute. This will contain the name of the last ID store that was checked. If want to ensure that the authentication did in fact succeed should also check the following:
    "Network Access:AuthenticationStatus EQUALS AuthenticationPassed"

  • Passing SQL Server identity attributes values into adf entity objects

    Hi all.
    I'm using Jdeveloper 10g for developing an ADF Swing application based on MS SQL Server DB.
    Does anyone know if it is possible to pass SQL Server identity attributes values into the correspondent attrributes of adf entity objects, like we do with Oracle DB Sequence.
    The problem is that i should somhow implement cascade deleting of detail view objects, so i should use the composition association. But since i cant fill the primary key attribute with appropriate value (that is actually a ms sql server db sequence value) i always get
    the following exception: oracle.jbo.InvalidOwnerException: JBO-25030 as i try to create a new pair of master/detail objects.
    Thanks in advance.
    Alex.

    The approach is good. but i still dont understand how i can address the sql server db sequence (identity field) programmatically...
    The code offered
    SequenceImpl sequence = new SequenceImpl("PRODUCTS_SEQ",getDBTransaction());
    setProdId(sequence.getSequenceNumber());
    generates something like this:
    select deq_name.nextval from dual
    but this syntax works for oracle only... and not for sql server...
    Edited by: Timin on Mar 26, 2009 6:34 AM
    Edited by: Timin on Mar 26, 2009 10:25 AM

  • Golden Gate Sequence Value replication?

    Hi all,
    I have searched the web, and read the Golden Gate documentation but I've found mixed answers.
    I'm just trying to ascertain for certain whether it's possible to automatically replicate sequence values in a bi-directional configuration. Both databases will be identical and both will be 11gR2 with the latest version of GG.
    If it is not possible to automatically increment sequences in a bi-directional configuration, what are the best practices for maintaing them?
    One option is the alternate sequences on each database, one with even values (for example) and one with odd values, but this requires deployment of new sequences on both databases, something we were hoping would be taken care of by the replication. (yes the sequence creation can be taken care of but the value is not incremented on the target database).
    another way that we thought of off the top of our heads is to have an on insert trigger (we only use sequences to generate surrogate keys) which will select nextval from the target database via a db link, but this seems somewhat cumbersome.
    What is best practice?

    Use sequence parameter... here is from Golden gate document:
    SEQUENCE
    Valid for Extract
    Use the SEQUENCE parameter to extract sequence values from the transaction log forpropagation to a GoldenGate trail and delivery to another database. Currently, GoldenGate supports sequences for the Oracle database.
    NOTE DDL support for sequences (CREATE, ALTER, DROP, RENAME) is compatible with, but not required for, replicating sequence values. To replicate just sequence values, you do not need to install the GoldenGate DDL support environment. You can just use the SEQUENCE parameter.
    GoldenGate ensures that the values of a target sequence are:
    ● higher than the source values if the increment interval is positive
    ● lower than the source values if the increment interval is negative
    Depending on the increment direction, Replicat applies one of the following formulas as a test when it performs an insert:
    source_highwater_value + (source_cache_size * source_increment_size * source_RAC_nodes) <= target_highwater_value
    Or...
    source_highwater_value + (source_cache_size * source_increment_size * source_RAC_nodes) >= target_highwater_value
    If the formula evaluates to FALSE, the target sequence is updated to be higher than the source value (if sequences are incremented) or lower than the source value (if sequences are decremented). The target must always be ahead of, or equal to, the expression in the parentheses in the formula. For example, if the source highwater value is 40, and CACHE is 20, and the source INCREMENTBY value is 1, and there are two source RAC nodes, the target highwater value should be at least 80:
    40 + (20*1*2) <80
    If the target highwater value is less than 80, GoldenGate updates the sequence to increase the highwater value, so that the target remains ahead of the source. To get the current highwater value, perform this query:
    SELECT last_number FROM all_sequences WHERE sequence_owner=upper('SEQUENCEOWNER') AND sequence_name=upper('SEQUENCENAME');

  • Prevent skipping sequence value?

    We created a sequenential PK populated from a another database table. We take value from this table and update last sequence value.
    ( IN ADF faces 11g app)
    But if an error in commit processing of page, sequence is populated on the screeen. Error can be formatting error, validation error or etc
    Then we correct format mistakes a new number is popolated at PK field.
    So some values are skipped.
    How can we prevent skipping sequence value? it is very important issue in our bussiness case.
    Thanks...

    We write code in doDML metdod of entity object as following mypackage.getmaxno().
    We can posponed getting max no formatting till commit time. Where we need to write code to prevent the gap ?
    protected void doDML(int operation, TransactionEvent e) {
    if(operation==DML_INSERT){
    String sql="{?= call mypackage.getmaxno()}";
    CallableStatement cs=getDBTransaction().createCallableStatement(sql,0);
    try {
    cs.registerOutParameter(1,OracleTypes.VARCHAR);
    cs.execute();
    String MaxNo=cs.getString(1);
    setMaxNo(evrakNo);
    createDoc();
    } catch (SQLException f) {f.printStackTrace();}
    super.doDML(operation, e);
    }

  • Unable to save Sequence value to Database

    Hi,
    I am trying to pupulate a sequence value so that I can use it as primary key along with the combination of other columns later. My problem is that the sequence value is getting populated on the page with the right value, But is not getting saved to the database. The Column is there in the VO. The column is blank on the table. When I print it(System.out.println("Seq=" + xSeq.getText(pageContext));), the value is null. Can anyone please advice what I am doing wrong OR if I am missing anything here.
    Thanks
    Ali
    My CO file:
    ============
    package lac.oracle.apps.lac.jobperf.server.webui;
    import oracle.apps.fnd.common.VersionInfo;
    import oracle.apps.fnd.framework.webui.OAControllerImpl;
    import oracle.apps.fnd.framework.webui.OAPageContext;
    import oracle.apps.fnd.framework.webui.beans.OAWebBean;
    import oracle.apps.fnd.framework.OAApplicationModule;
    import oracle.apps.fnd.framework.webui.OADialogPage;
    import oracle.apps.fnd.framework.webui.TransactionUnitHelper;
    import oracle.jbo.domain.Number;
    import oracle.apps.fnd.common.MessageToken;
    import oracle.apps.fnd.framework.OAApplicationModule;
    import oracle.apps.fnd.framework.OAException;
    import oracle.apps.fnd.framework.OAViewObject;
    import oracle.apps.fnd.framework.webui.OAWebBeanConstants;
    import oracle.apps.fnd.framework.webui.beans.layout.OAMessageComponentLayoutBean;
    import oracle.apps.fnd.framework.webui.beans.layout.OAPageLayoutBean;
    import oracle.apps.fnd.framework.webui.beans.message.OAMessageStyledTextBean;
    import com.sun.java.util.collections.HashMap;
    import oracle.bali.share.util.IntegerUtils;
    import oracle.apps.fnd.framework.server.OADBTransaction;
    * Controller for ...
    public class ReviewCreateCO extends OAControllerImpl
    public static final String RCS_ID="$Header$";
    public static final boolean RCS_ID_RECORDED =
    VersionInfo.recordClassVersion(RCS_ID, "%packagename%");
    * Layout and page setup logic for a region.
    * @param pageContext the current OA page context
    * @param webBean the web bean corresponding to the region
    OAApplicationModule am; // dave
    OADBTransaction oadbxn; // dave
    oracle.jbo.domain.Number Seq;
    public void processRequest(OAPageContext pageContext, OAWebBean webBean)
    // Always call this first
    super.processRequest(pageContext, webBean);
    am = pageContext.getApplicationModule(webBean); // dave
    oadbxn = am.getOADBTransaction(); // dave
    OAPageLayoutBean pageLayout = pageContext.getPageLayoutBean();
    OAMessageComponentLayoutBean mainRn = (OAMessageComponentLayoutBean)pageLayout.findIndexedChildRecursive("MainRN");
    // If isBackNavigationFired = false, we are here after a valid navigation
    // (the user selected the Create Review button) and we should proceed
    // normally and initialize a new Review.
    if (!pageContext.isBackNavigationFired(false))
    // We indicate that we are starting the create transaction(this
    // is used to ensure correct Back button behavior).
    TransactionUnitHelper.startTransactionUnit(pageContext,"jobperfCreateTxn");
    // This test ensures that we don't try to create a new review if we
    // had a JVM failover, or if a recycled application module is activated
    // after passivation. If this things happen, BC4J will be able to find
    // the row you created so the user can resume work.
    if (!pageContext.isFormSubmission())
    OAApplicationModule am = pageContext.getApplicationModule(webBean);
    // String Seq = (String)oadbxn.getValue("Seq");
    oracle.jbo.domain.Number Seq = oadbxn.getSequenceValue("lac.LAC_CM_PERF_REVIEW_SEQ");
    OAMessageStyledTextBean xSeq = (OAMessageStyledTextBean)mainRn.findIndexedChildRecursive("Seq");
    xSeq.setText(Seq.toString());
    am.invokeMethod("createReview",null);
    // Initialize the ApplicationpropertiesVO for PPR.
    // am.invokeMethod("init");
    else
    if (!TransactionUnitHelper.isTransactionUnitInProgress(pageContext,"jobperfCreateTxn", true))
    // We got here through some use of the browser "Back" button, so we
    // want to display a stale data error and disallow access to the page.
    // if this were a real application, we would propably display a more
    // context-specific message telling the user she can't use the browser
    //"Back" button and the "Create" page. Instead, we wanted to illustrate
    // how to display the Applications standard NAVIGATION ERROR message.
    OADialogPage dialogPage = new OADialogPage(NAVIGATION_ERROR);
    pageContext.redirectToDialogPage(dialogPage);
    } // end processRequest()
    * Procedure to handle form submissions for form elements in
    * a region.
    * @param pageContext the current OA page context
    * @param webBean the web bean corresponding to the region
    public void processFormRequest(OAPageContext pageContext, OAWebBean webBean)
    {    //super.processFormRequest(pageContext, webBean);
    // Always call this first.
    super.processFormRequest(pageContext, webBean);
    OAApplicationModule am = pageContext.getApplicationModule(webBean);
    OAPageLayoutBean pageLayout = pageContext.getPageLayoutBean();
    OAMessageComponentLayoutBean mainRn = (OAMessageComponentLayoutBean)pageLayout.findIndexedChildRecursive("MainRN");
    // Pressing the "Apply" button means the transaction should be validated
    // and committed.
    // OAPageLayoutBean pageLayout = pageContext.getPageLayoutBean();
    // String Seq = SeqText.getText(pageContext);
    oadbxn.putValue("Seq", Seq);
    am = pageContext.getApplicationModule(webBean);
    oadbxn = am.getOADBTransaction();
    if (pageContext.getParameter("Apply") != null)
    // Generally in the tutorial application and the labs, we've illustrated
    // all BC4J interaction on the server (except for the AMs, of course). Here,
    // we're dealing with the VO directly so the comments about the reasons
    // why we're obtaining values from the VO and not the request make sense
    // in context.
    OAViewObject vo = (OAViewObject)am.findViewObject("jobperfVO1");
    // Note that we have to get this value from the VO because the EO will
    // assemble it during its validation cycle.
    // For performance reasons, we should generally be calling getEmployeeName()
    // on the EmployeeFullVORowImpl object, but we don't want to do this
    // on the client so we're illustrating the interface-appropriate call. If
    // we implemented this code in the AM where it belongs, we would use the
    // other approach.
    String employeeName = (String)vo.getCurrentRow().getAttribute("FullName");
    // We need to get a String so we can pass it to the MessageToken array below. Note
    // that we are getting this value from the VO (we could also get it from.
    // the Bean as shown in the Drilldwon to Details lab) because the item style is messageStyledText,
    // so the value isn't put on the request like a messaqeTextInput value is.
    String employeeNumber = (String)vo.getCurrentRow().getAttribute("EmployeeNumber");
    //ma String employeeNum = String.valueOf(employeeNumber.intValue());
    //ma Number employeeNumber = (Number)vo.getCurrentRow().getAttribute("EmployeeNumber");
    //ma String employeeNum = String.valueOf(employeeNumber.intValue());
    // Simply telling the transaction to commit will cause all the Entity Object validation
    // to fire.
    // Note: there's no reason for a developer to perform a rollback. This is handled by
    // the framework if errors are encountered.
    OAMessageStyledTextBean xSeq = (OAMessageStyledTextBean)mainRn.findIndexedChildRecursive("Seq");
    System.out.println("Seq=" + xSeq.getText(pageContext));
    am.invokeMethod("apply");
    // Indicate that the Create transaction is complete.
    TransactionUnitHelper.endTransactionUnit(pageContext, "jobperfCreateTxn");
    // Assuming the "commit" succeeds, navigate back to the "Search" page with
    // the user's search criteria intact and display a "Confirmation" message
    // at the top of the page.
    MessageToken[] tokens = { new MessageToken("EMP_NAME", employeeName),
    new MessageToken("EMP_NUMBER", employeeNumber) };
    OAException confirmMessage = new OAException("PER", "LAC_FWK_TBX_T_EMP_CREATE_CONF", tokens,
    OAException.CONFIRMATION, null);
    // Per the UI guidelines, we want to add the confirmation message at the
    // top of the search/results page and we want the old search criteria and
    // results to display.
    pageContext.putDialogMessage(confirmMessage);
    HashMap params = new HashMap(1);
    // Replace the current employeeNumber request parameter value with "X"
    params.put("employeeNumber", "employeeNumber");
    // IntegerUtils is a handy utility
    params.put("employeeNumber",IntegerUtils.getInteger(5));
    pageContext.forwardImmediately(
    "OA.jsp?page=/lac/oracle/apps/lac/jobperf/webui/jobperfPG",
    null,
    OAWebBeanConstants.KEEP_MENU_CONTEXT,
    null,
    params, //null,
    false, // retain AM
    OAWebBeanConstants.ADD_BREAD_CRUMB_YES);
    else if (pageContext.getParameter("Cancel") != null)
    am.invokeMethod("rollbackReview");
    // Indicate that the Create transaction is complete.
    TransactionUnitHelper.endTransactionUnit(pageContext, "jobperfCreateTxn");
    pageContext.forwardImmediately("OA.jsp?page=/lac/oracle/apps/lac/jobperf/webui/jobperfPG",
    null,
    OAWebBeanConstants.KEEP_MENU_CONTEXT,
    null,
    null,
    false, // retain AM
    OAWebBeanConstants.ADD_BREAD_CRUMB_NO);
    } // end processFormRequest()
    }

    Hi Tapash,
    Thanks for all of you guys(Tapash/Sumit/user550094) help. The sequence is working and also populating the values in the table when I do not have any validation checks imposed on it.
    If I add any validations as mentioned in the exercise for create page where it checks if the sequence can be updated while null and so on... and throws appropriate exception. I get error. That is the code that I mentioned above.
    Here is the validation code for EOImpl:
    As mentioned below in order for the code to compile and work I had to comment the "throw new OAAttrvalException". If I uncomment the
    "throw new OAAttrvalException" part, it gives me the following error while compiling:
    "Error(796,13): method getPrimarykey not found in class lac.oracle.apps.lac.jobperf.schema.server.jobperfEOImpl"
    public void setSeq(Number value)
    // Because of the declaritive validation that you specified for this attribute,
    // BC4J validates that this can be updated only on a new line, and that this,
    // mandatory attribute cannot be null. This code adds the additional check
    // of only allowing an update if the value is null to prevent changes while
    // the object is in memory.
    if (getSeq() != null)
    /* throw new OAAttrValException(OAException.TYP_ENTITY_OBJECT,
    getEntityDef().getFullName(), //getSeq(), // EO name
    getPrimarykey(), // EO PK
    "Seq", // Attribute Name
    value, // Attribute value
    "AK", // Message product short name
    "FWK_TBX_T_EMP_ID_NO_UPDATE"); // Message name */
    if (value != null)
    // Seq ID must be unique. To verify this, check both the
    // entity cache and the database. In this case, it's appropriate
    // to use findByPrimaryKey() because you're unlikely to get a match, and
    // and are therefore unlikely to pull a bunch of large objects into memory.
    // Note that findByPrimaryKey() is guaranteed to check all employees.
    // First it checks the entity cache, then it checks the database.
    OADBTransaction transaction = getOADBTransaction();
    Object[] employeeKey = {value};
    EntityDefImpl empDefinition = jobperfEOImpl.getDefinitionObject();
    jobperfEOImpl Seq =
    (jobperfEOImpl) empDefinition.findByPrimaryKey(transaction, new Key(employeeKey));
    if (Seq != null)
    /* throw new OAAttrValException(OAException.TYP_ENTITY_OBJECT,
    getEntityDef().getFullName(), // .getSeq(), // EO name
    getPrimaryKey(), // EO PK
    "Seq", // Attribute Name
    value, // Attribute value
    "AK", // Message product short name
    "FWK_TBX_T_EMP_ID_UNIQUE"); // Message name */
    // Note that this is the point at which the value is actually set on the EO cache
    // (during the scope of setAttributeInternal processing). If you don't make this
    // call after you perform your validation, your value will not be set correctly.
    // Also, any declarative validation that you define for this attribute is executed
    // within this method.
    setAttributeInternal(SEQ, value);
    } // end SetSeq
    I am sorry if I have confused you. I really did not mean to do it.
    Thanks,
    Ali

  • Using a single sequence value over multiple scripts (in a variable?)

    Hi all...
    I'm writing a number of scripts that insert rows into tables.
    To better explain my point, I'll paste a simple breakdown of the scripts here as that will be easier to understand...
    Script 1:
    INSERT INTO WORKGROUP_DEPARTMENTS(ID, DEPT_NAME, DEPT_TYPE)
    VALUES (SEQ_WGDPT.NEXTVAL, 'Staff', 3);
    Script 2:
    INSERT INTO WORKGROUP_SECTIONS(ID, SECT_NAME, WGDPT_ID)
    VALUES (SEQ_WGSEC.NEXTVAL, 'Staff 1',
    (SELECT ID FROM WORKGROUP_DEPARTMENTS
    WHERE DEPT_NAME = 'Staff'
    AND DEPT_TYPE = '3')
    Script 3:
    INSERT INTO WORKGROUPS(NAME, UNIT_TYPE, WGSEC_ID)
    VALUES ('Staff Room', 3,
    (SELECT ID FROM WORKGROUP_SECTIONS
    WHERE SECT_NAME = 'Staff 1')
    As you can see, in scripts 1 and 2 a new value is produced from a sequence (SEQ_WGDPT & SEQ_WGSEC respectively). Then, in scripts 2 & 3 (respectively) these values are inserted into another table.
    What I'm trying to figure out is: can I do the same thing here without having to include the horrible SELECT statements in scripts 2 & 3 in order to find the ID, which was produced by the sequence in the previous script?
    Unfortunately they do have to be separate scripts, and as such I can't call Sequence.CurrVal from a different script as other users may have used the sequence since it was used initially in the previous script. I could call it from the original calling script, and save it intop a variable, but I have no idea how to - even if it is the right idea!
    I tried to insert the sequence value into a variable a la PL/SQL so that I could call this variable from the next script, but failed miserably as I'm rubbish!
    Any help would be great. Thanks.

    You can use PL/SQL, for example:
    SQL> desc t
    Name                                      Null?    Type
    ID                                                 NUMBER
    NAME                                               VARCHAR2(10)
    SQL> desc t1
    Name                                      Null?    Type
    ID                                                 NUMBER
    NAME                                               VARCHAR2(10)
    ID1                                                NUMBER
    SQL> desc t2
    Name                                      Null?    Type
    ID                                                 NUMBER
    NAME                                               VARCHAR2(10)
    ID2                                                NUMBER
    SQL> create sequence seq_1;
    Sequence created.
    SQL> declare
      2   prev_id number;
      3  begin
      4   insert into t values(seq_1.nextval,'A')
      5   returning id into prev_id;
      6   insert into t1 values(seq_1.nextval,'B',prev_id)
      7   returning id into prev_id;
      8   insert into t2 values(seq_1.nextval,'C',prev_id);
      9  end;
    10  /
    PL/SQL procedure successfully completed.
    SQL> select * from t;
            ID NAME
             1 A
    SQL> select * from t1;
            ID NAME              ID1
             2 B                   1
    SQL> select * from t2;
            ID NAME              ID2
             3 C                   2
    Rgds

  • How to get sequence value on click of button in OAF Page

    Hi all,
    I have a requirement to get a field called Bankrefernece number populated with sequence value on click of apply button ; i mean inserting new record in database for new transaction.
    Sequence Value should be something like this:
    Example
    No     Transfer Date     Bank Reference Number
    (DDMMYY_999)
    1     24-Oct-2010     241010_001
    2     24-Oct-2010     241010_002
    3     25-Oct-2010     251010_001
    means every day sequence should start with the date initials.
    Kindly give your valuable input.
    Thanks
    Sims
    Edited by: sims on Jan 4, 2011 11:22 PM

    sims wrote:
    Hi Anil,
    Its a standard page & i want it on click of apply button but my question is when i click apply button it navigates to other page..is it possible in such scenario to extend the controller.
    Thnx for ur suggestion
    SimsThat is not an issue, you can extend the controller of that page and get the value of sequence and set it to the VO attribute.
    Thanks
    --Anil
    http://oracleanil.blogspot.com

  • Getting error while reset sequence value

    i hve created two table. and a sequence for other table. i want to do that when i insert into a first table, entries of other table should be deleted and sequence value should reset to 1. For that i have executed the following sql code
    but getting the error:
    create or replace Trigger m_sale_ainsert_trig
    after insert on m_sale_bill
    for each row
    begin
    DELETE FROM M_TEMP;
    <<COLUMN_SEQUENCES>>
    BEGIN
    Alter Sequence M_TEMP_SEQ Restart with 1;
    END COLUMN_SEQUENCES;
    end;
    Alter Trigger m_sale_ainsert_trig enable;
    Warning: execution completed with warning
    Trigger m_sale_ainsert_trig Compiled.
    Alter Trigger m_sale_ainsert_trig succeeded.
    5/4 PLS-00103: Encountered the symbol "ALTER" when expecting one of the following:
    ( begin case declare exit for goto if loop mod null pragma
    raise return select update while with <an identifier>
    <a double-quoted delimited-identifier> <a bind variable> <<
    continue close current delete fetch lock insert open rollback
    savepoint set sql execute commit forall merge pipe purge
    pls rectify it!!!!! what are the mistakes in this code?
    Edited by: JKMourya on Mar 21, 2013 10:55 AM

    JKMourya wrote:
    i hve created two table. and a sequence for other table. i want to do that when i insert into a first table, entries of other table should be deleted and sequence value should reset to 1. For that i have executed the following sql code
    but getting the error:
    create or replace Trigger m_sale_ainsert_trig
    after insert on m_sale_bill
    for each row
    begin
    DELETE FROM M_TEMP;
    <<COLUMN_SEQUENCES>>
    BEGIN
    Alter Sequence M_TEMP_SEQ Restart with 1;
    END COLUMN_SEQUENCES;
    end;
    Alter Trigger m_sale_ainsert_trig enable;
    Warning: execution completed with warning
    Trigger m_sale_ainsert_trig Compiled.
    Alter Trigger m_sale_ainsert_trig succeeded.
    5/4 PLS-00103: Encountered the symbol "ALTER" when expecting one of the following:
    ( begin case declare exit for goto if loop mod null pragma
    raise return select update while with <an identifier>
    <a double-quoted delimited-identifier> <a bind variable> <<
    continue close current delete fetch lock insert open rollback
    savepoint set sql execute commit forall merge pipe purge
    pls rectify it!!!!! what are the mistakes in this code?
    Edited by: JKMourya on Mar 21, 2013 10:55 AMDDL inside PL/SQL is NOT allowed
    you must (ab)use EXECUTE IMMEDIATE

  • A function instead of UNBOUNDED PRECEDING (like "Last field with value=0")

    Hello,
    I have a table with many rows. The attributes of the table are code, month and value.
    For each code there are 12 months and 12 values.
    No I want to add the gaps between the months...
    Is it possible to count the following gaps between the different rows...?
    For example:
    Original table1:_
    code, month, value
    1,1,20
    1,2,0
    1,3,30
    1,4,0
    1,5,40
    1,6,0
    1,7,0
    1,8,20
    1,9,0
    1,10,10
    1,11,0
    1,12,0
    5,1,0
    5,2,20
    5,3,10
    description:*
    january value = 20
    february value = 0 (=>count this gap => new value 1 )
    march value = 30
    april value = 0 (=>count this gap => new value 1 )
    may value = 40
    june value = 0
    july value = 0 (=>count this two following gaps => new value 2 )
    agust value = 20
    september value = 0 (=>count this gap => new value 1 )
    october value = 10
    november value = 0
    december value = 0 (=>count this two following gaps => new value 2 )
    New target table:_
    code, month, value
    1,1,20
    1,2,*1*
    1,3,30
    1,4,*1*
    1,5,40
    1,6,0
    1,7,*2*
    1,8,20
    1,9,*1*
    1,10,10
    1,11,0
    1,12,*2*
    5,1,*1*
    5,2,20
    5,3,10
    I tried this code:
    select code, month
    sum(value) over (
    order by month
    rows between unbounded preceding and current row
    *) as final_value*
    from table1 order by month;
    This adds all following fields cumulative from beginning to current_row. But I need this adding only for the following gaps... then start with countin by 0.
    I need only the following like in the example on top. Maybe is there an other function like decode to count only the following gaps...!?
    A function instead of unbounded preceding....like "*Last field with value=0*" or something... ?
    Best regards,
    Tim

    TimB83 wrote:
    I have a table with many rows. The attributes of the table are code, month and value.
    For each code there are 12 months and 12 values.
    No I want to add the gaps between the months...
    Is it possible to count the following gaps between the different rows...?
    For example:
    Original table1:_
    code, month, value
    1,1,20
    1,2,0
    1,3,30
    1,4,0
    1,5,40
    1,6,0
    1,7,0
    1,8,20
    1,9,0
    1,10,10
    1,11,0
    1,12,0
    5,1,0
    5,2,20
    5,3,10
    description:*
    january value = 20
    february value = 0 (=>count this gap => new value 1 )
    march value = 30
    april value = 0 (=>count this gap => new value 1 )
    may value = 40
    june value = 0
    july value = 0 (=>count this two following gaps => new value 2 )
    agust value = 20
    september value = 0 (=>count this gap => new value 1 )
    october value = 10
    november value = 0
    december value = 0 (=>count this two following gaps => new value 2 )
    New target table:_
    code, month, value
    1,1,20
    1,2,*1*
    1,3,30
    1,4,*1*
    1,5,40
    1,6,0
    1,7,*2*
    1,8,20
    1,9,*1*
    1,10,10
    1,11,0
    1,12,*2*
    5,1,*1*
    5,2,20
    5,3,10
    ...Tim,
    you should post this question on the "SQL and PL/SQL" forum since it's a typical SQL question.
    There are probably much better ways to accomplish this and the guys over there will tell you, but here are two examples that might get you started:
    1. Pre-10g without MODEL clause
    with t as (
    select 1 as code, 1 as month, 20 as value from dual union all
    select 1 as code, 2 as month, 0 as value from dual union all
    select 1 as code, 3 as month, 30 as value from dual union all
    select 1 as code, 4 as month, 0 as value from dual union all
    select 1 as code, 5 as month, 40 as value from dual union all
    select 1 as code, 6 as month, 0 as value from dual union all
    select 1 as code, 7 as month, 0 as value from dual union all
    select 1 as code, 8 as month, 20 as value from dual union all
    select 1 as code, 9 as month, 0 as value from dual union all
    select 1 as code, 10 as month, 10 as value from dual union all
    select 1 as code, 11 as month, 0 as value from dual union all
    select 1 as code, 12 as month, 0 as value from dual union all
    select 5 as code, 1 as month, 0 as value from dual union all
    select 5 as code, 2 as month, 20 as value from dual union all
    select 5 as code, 3 as month, 10 as value from dual
    r1 as (
    select
            case
            when value = 0
            then 1
            else 0
            end as is_gap
          , case
            when value != 0
            then rownum
            else null
            end as grp_info
          , code
          , month
          , value
    from
            t
    r2 as (
    select
            last_value(grp_info ignore nulls) over (partition by code order by month) as grp
          , is_gap
          , code
          , month
          , value
    from
            r1
    select
            code
          , month
          , case
            when value = 0
            and (lead(value) over (partition by code order by month) != 0 or
                 lead(value) over (partition by code order by month) is null)
            then sum(is_gap) over (partition by code, grp)
            else value
            end as value
    from r2;2. 10g and later with MODEL clause
    with t as (
    select 1 as code, 1 as month, 20 as value from dual union all
    select 1 as code, 2 as month, 0 as value from dual union all
    select 1 as code, 3 as month, 30 as value from dual union all
    select 1 as code, 4 as month, 0 as value from dual union all
    select 1 as code, 5 as month, 40 as value from dual union all
    select 1 as code, 6 as month, 0 as value from dual union all
    select 1 as code, 7 as month, 0 as value from dual union all
    select 1 as code, 8 as month, 20 as value from dual union all
    select 1 as code, 9 as month, 0 as value from dual union all
    select 1 as code, 10 as month, 10 as value from dual union all
    select 1 as code, 11 as month, 0 as value from dual union all
    select 1 as code, 12 as month, 0 as value from dual union all
    select 5 as code, 1 as month, 0 as value from dual union all
    select 5 as code, 2 as month, 20 as value from dual union all
    select 5 as code, 3 as month, 10 as value from dual
    select
             code
           , month
           , value
    from
             t
    model
    partition by (code)
    dimension by (month)
    measures (value, 0 as gap_cnt)
    rules (
      gap_cnt[any] order by month =
      case
      when value[cv() - 1] = 0
      then gap_cnt[cv() - 1] + 1
      else 0
      end,
      value[any] order by month =
      case
      when value[cv()] = 0 and presentv(value[cv() + 1], value[cv() + 1], 1) != 0
      then presentv(gap_cnt[cv() + 1], gap_cnt[cv() + 1], gap_cnt[cv()] + 1)
      else value[cv()]
      end
    );Regards,
    Randolf
    Oracle related stuff blog:
    http://oracle-randolf.blogspot.com/
    SQLTools++ for Oracle (Open source Oracle GUI for Windows):
    http://www.sqltools-plusplus.org:7676/
    http://sourceforge.net/projects/sqlt-pp/

  • Expression or Calculation tag value are reset to last application saved value when PC reboot

    I'm doing daily logging data for daily report and for the daily flow calculation, I'm doing those step:
    1- When Timer1 = 11h55 -> Daily_Volume = (Actual_Volume - Yesterday_Volume)
    2- When Timer2 = 11h56 -> Yesterday_Volume = (Actual_Volume )
    3- When Timer3 = 11h58 -> Log to database Daily Volume
    The problem is that when you restart the application or the PC, the calculation tag "Yesterday volume" reset to the last saved value.  
    Exemple 2012-01-01 last saved application changes,
    - 2012-01-01 my Actual_Volume = 1000 USGal moved to my Yesterday_Volume.
    - 2012-01-02 my Actual_Volume (1100 USGal)  - Yesterday_Volume (1000 USGal) = Daily_Volume (1000 USGal) move the Actual_Volume to Yesterday_Volume.
    - 2012-01-03 my Actual_Volume (1200 USGal)  - Yesterday_Volume (1100 USGal) = Daily_Volume (100 USGal)
    We've got a power shutdown or any PC reboot.  On the 2013-01-01
    - 2013-01-01 my Actual_Volume (19000 USGal)  - Yesterday_Volume (1000 USGal) = Daily_Volume (18000 USGal) move the Actual_Volume to Yesterday_Volume.
    - 2013-01-02 my Actual_Volume (19100 USGal)  - Yesterday_Volume (19000 USGal) = Daily_Volume (100 USGal) move the Actual_Volume to Yesterday_Volume.
    Those values reset to the last application saved value cause bad data in my daily, monthly, yearly reports.  How can we retain calculation tag value to avoid those reset problem?

    In Edit mode, File->Modify Process, there is an option "Save state file every xxx minutes". Is this one checked or not?
    The value of objects should be saved in the state file when you close the process, or periodically saved according to this setting. The saved value will be loaded next time you open the process.
    Ryan Shi
    National Instruments

  • Need to populate sequence value in a field after insert in oaf page

    Hi All,
    I have a custom OAF insert page in that i need to populate a sequence value to a field once the data inserted successfully to the table.
    so for that i followed the below approach.
    1>Created a sequence in database.
    2>In the EOImpl java file in the setter method for the respective field have written below code.
        public void setContainid(Number value) {
            if (value == null) {
                    OADBTransaction t = getOADBTransaction();
                    value = t.getSequenceValue("XXXXX_CONTAIN_SEQ");
            setAttributeInternal(CONTAINID,value);  
    But still i am not able to populate the sequence value for the field in my oaf page,please help me out on thsi.
    Thanks

    Hi,
    Write this logic in create method of EOImpl:
      public void create(AttributeList attributeList)
        super.create(attributeList);
        OADBTransaction transaction = getOADBTransaction();
        Number contID = transaction.getSequenceValue("XXXXX_CONTAIN_SEQ");
        setContainId(contID);
    --Sushant

  • [Q] Identity Sequence issue causes MAB to auth against AD ??

    We have a strange issue whereby some users have suddenly failed to correctly authenticate against ACS 5.1 - we cant work out why, as nothing has changed and would greatly appreciate your help.
    We have dot1x configured on our network with MAB fallback. We havent yet rolled out dot1x to the clients even though the network is set up for this. In the meantime, we are using Mac Authentication Bypass. We do use 802.1x for wireless though.
    I have set up the folowing Identity Sequence:
    AD1 (this is set up as our AD servers for 802.1X user and machine auth)
    SecurID Server (we dont use this yet either)
    Internal Users (this is just used to authenticate ciscoworks)
    Internal Hosts (this contains the list of allowed MAC addresses)
    Typically what we have seen today is a user initially authenticates successfully by matching the Internal Hosts identity store, but then an hour later, re-authentication fails as the MAC address matches the AD1 id store and subsequently fails due to the MAC address not being present within AD.
    Here is the successful connection entry (all MAC addresses substituted form the originals)...
    Steps
    11001  Received RADIUS Access-Request
    11017  RADIUS created a new session
    11027  Detected Host Lookup UseCase (Service-Type = Call Check (10))
    Evaluating Service Selection Policy
    15004  Matched rule
    15012  Selected Access Service - Network Access
    Evaluating Identity Policy
    15006  Matched Default Rule
    15013  Selected Identity Store - Internal Hosts
    24432  Looking up user in Active Directory - 00-1B-78-00-33-00
    24412  User not found in Active Directory
    24559  Searching for user in the RSA identity store.
    24556  User record was not found in the cache.
    24210  Looking up User in Internal Users IDStore - 00-1B-78-00-33-00
    24216  The user is not found in the internal users identity store.
    24209  Looking up Host in Internal Hosts IDStore - 00-1B-78-00-33-00
    24211  Found Host in Internal Hosts IDStore
    22037  Authentication Passed
    22023  Proceed to attribute retrieval
    24432  Looking up user in Active Directory - 00-1B-78-00-33-00
    24412  User not found in Active Directory
    22016  Identity sequence completed iterating the IDStores
    Evaluating Group Mapping Policy
    24423  ACS has not been able to confirm previous successful machine authentication for user in Active Directory
    Evaluating Exception Authorization Policy
    15042  No rule was matched
    Evaluating Authorization Policy
    15004  Matched rule
    15016  Selected Authorization Profile - MAB-PC
    11022  Added the dACL specified in the Authorization Profile
    11002  Returned RADIUS Access-Accept
    Here is the failed connection entry....
    Steps
    11001  Received RADIUS Access-Request
    11017  RADIUS created a new session
    11027  Detected Host Lookup UseCase (Service-Type = Call Check (10))
    Evaluating Service Selection Policy
    15004  Matched rule
    15012  Selected Access Service - Network Access
    Evaluating Identity Policy
    15006  Matched Default Rule
    15013  Selected Identity Store - AD1
    24432  Looking up user in Active Directory - 00-1B-78-00-33-00
    24416  User's Groups retrieval from Active Directory succeeded
    22037  Authentication Passed
    22023  Proceed to attribute retrieval
    22038  Skipping the next IDStore for attribute retrieval because it is the one we authenticated against
    22016  Identity sequence completed iterating the IDStores
    Evaluating Group Mapping Policy
    24423  ACS has not been able to confirm previous successful machine authentication for user in Active Directory
    Evaluating Exception Authorization Policy
    15042  No rule was matched
    Evaluating Authorization Policy
    15006  Matched Default Rule
    15016  Selected Authorization Profile - DenyAccess
    15039  Selected Authorization Profile is DenyAccess
    11003  Returned RADIUS Access-Reject
    Any help greatly appreciated!

    Hello Paul,
    If a switch is configured for dot1x with MAB fallback as ours is, does  the switch still send the MAC address for a dot1x-enabled client as well  as the user and host AD credentials even though the MAC address is not  required for auth in this case?
    A switchport configured for 802.1x with MAB fallback will first send an EAPOL Start message. An 802.1x enabled client would be able to provide the appropriate User and Host information and get authenticated via 802.1x. No MAC address will be send at this point.
    For the same switch and a client with dot1x DISABLED, does the switch forward just the MAC address to ACS?
    Yes, the switch will send the EAPOL Start messages to the 802.1x Disabled client. It will not be able to respond to the switchport request. After the retries the switchport will fallback to MAB and expect the client to send the MAC Address to get authenticated.
    If the switch invokes MAB and passes just the MAC address to ACS, does  ACS still run the MAC address through the full identity store sequence  which starts with AD1, even though dot1x is not running (and therefore  AD matching is not relevant)?
    Yes, the ACS will still run the authentication against all the Database specified on the Identity Store Sequest from top to bottom
    Ultimately, I am trying to decide if
    a) ACS is passing non-dot1x credentials (namely the MAC address)  to AD erroneously ---> Do not think this might be the case as it will  always pass the credentials to the every database on the specified  order
    b) if AD is responding (correctly or incorrectly) with a match ---> We know this one is happening.
    c)   if AD is rejecting the MAC address but that the rejection message isnt   triggering the next iteration in the identity store sequence. ---->  Do not think AD is rejecting the MAC Address based on:
    24432  Looking up user in Active Directory - 00-1B-78-00-33-00
    24416  User's Groups retrieval from Active Directory succeeded
    At this point I have no suggestions on how to determine if the MAC Address is being properly authenticated on the AD Side

Maybe you are looking for