Lock custom tables

Hi,
I am writing program to upload data from excel to custom tables.
Here i add/ update/delete records from the table based on entries from excel sheet.
While i run this program, how do i maintain locks on the table, so that any other user is not modifying the tables at the same time.
Points will be awarded immediately.
Thanks

<b>Lock objects</b> are used to lock the database table while making the modifications on the database table.
you can create your own lock objects using SE11.
if you create lock objects on any table system will create two function modules.
<b>1.ENQUEUE....
2.DEQUEUE.....</b>
first one is used to lock the table
second one used to removing lock on the table.
<b>This lock object</b> facilitates synchronous process. That is suppose if you are changing the table entries, and simultaneously there might be several programs running in the background or by anything else which also does changes to the same table. In this case you can lock the table so that other program will not able to update/insert/ do any other operation unless or until your program executes successfully.
You can create lock objects for this purpose in transaction SE11. SAP by default create 2 function modules. One for locking ( Enqueue) and other for unlocking ( Dequeue ). You can call these function module in appropriate places in your program.
ex...
lock Table
CALL FUNCTION 'ENQUEUE_E_TABLE'
EXPORTING
tabname = table_name
EXCEPTIONS
foreign_lock = 1
system_failure = 2
OTHERS = 3.
Unlock Table
CALL FUNCTION 'DEQUEUE_E_TABLE'
EXPORTING
tabname = table_name
<b><u>check the below links:</u></b>
http://help.sap.com/saphelp_40b/helpdata/en/cf/21eea5446011d189700000e8322d00/content.htm
Re: lock objects
Regards,
Moqeeth.

Similar Messages

  • Lock object problem on custom table

    Hi all.
    I am having a bit of an issue with a lock object on a home made table. We're using the UWL and a custom IView to display an extended invoice. No problem releasing the workitem lock, just the table entry lock.
    I can see the lock in SM12. Tried dequeue/dequeue all RFCs from backend, no luck.
    The lock is set from a custom RFC. This RFC succesfully releases the lock when used in SAPGUI, and we have an RFC enabled wrapper around it. However, once used in the portal, the locks aren't released. My suspicion is that it has to do with sessions and I can't see a way to control that since dynpro uses a connection pool IIRC.
    Anyone have any ideas on how to solve this?

    Small correction if you are not aware. Do not create your custom tables in APPS schema? Custom tables are supposed to created in custom schema such as XXPO and a synonym created for the table in APPS schema.
    When creating an EO, you do not need to provide the schema name. You would need to enter only the table name.
    Hope this helps.

  • Locking a custom table

    Hi All !!
    I want to update one custom table which has key fields K1, K2 and K3.
    I am using ENQUEUE_E_TABLE  to lock the table.But I dont know how to send the table for enqueue.
    Nextly, I need to send keys of table .Should I use any structure where I append the key fields and export the structure. The function call is as :
      CALL FUNCTION 'ENQUEUE_E_TABLE'
       EXPORTING
         MODE_RSTABLE         = 'E'
         TABNAME             = ?
         VARKEY               =?
       EXCEPTIONS
         FOREIGN_LOCK         = 1
         SYSTEM_FAILURE       = 2
         OTHERS               = 3
    Please help in this regard..
    Thanks in advance..
    Prabhas.

    Hai.
    Check this.
    Lock objects are use in SAP to avoid the inconsistancy at the time of data is being insert/change into database.
    SAP Provide three type of Lock objects.
    - Read Lock(Shared Locked)
    protects read access to an object. The read lock allows other transactions read access but not write access to
    the locked area of the table
    - Write Lock(exclusive lock)
    protects write access to an object. The write lock allows other transactions neither read nor write access to
    the locked area of the table.
    - Enhanced write lock (exclusive lock without cumulating)
    works like a write lock except that the enhanced write lock also protects from further accesses from the
    same transaction.
    You can create a lock on a object of SAP thorugh transaction SE11 and enter any meaningful name start with EZ Example EZTEST_LOCK.
    Use: you can see in almost all transaction when you are open an object in Change mode SAP could not allow to any other user to open the same object in change mode.
    Example: in HR when we are enter a personal number in master data maintainance screen SAP can't allow to any other user to use same personal number for changes.
    Technicaly:
    When you create a lock object System automatically creat two function module.
    1. ENQUEUE_<Lockobject name>. to insert the object in a queue.
    2. DEQUEUE_<Lockobject name>. To remove the object is being queued through above FM.
    You have to use these function module in your program.
    check this link for example.
    http://help.sap.com/saphelp_nw04s/helpdata/en/cf/21eea5446011d189700000e8322d00/content.htm
    tables:vbak.
    call function 'ENQUEUE_EZLOCK3'
    exporting
    mode_vbak = 'E'
    mandt = sy-mandt
    vbeln = vbak-vbeln
    X_VBELN = ' '
    _SCOPE = '2'
    _WAIT = ' '
    _COLLECT = ' '
    EXCEPTIONS
    FOREIGN_LOCK = 1
    SYSTEM_FAILURE = 2
    OTHERS = 3
    if sy-subrc <> 0.
    MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
    WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
    endif.
    Normally ABAPers will create the Lock objects, because we know when to lock and how to lock and where to lock the Object then after completing our updations we unlock the Objects in the Tables
    http://help.sap.com/saphelp_nw04s/helpdata/en/cf/21eea5446011d189700000e8322d00/content.htm
    purpose: If multiple user try to access a database object, inconsistency may occer. To avoid that inconsistency and to let multiple user give the accessibility of the database objects the locking mechanism is used.
    Steps: first we create a loc object in se11 . Suppose for a table mara. It will create two functional module.:
    1. enque_lockobject
    1. deque_lockobject
    before updating any table first we lock the table by calling enque_lockobject fm and then after updating we release the lock by deque_lockobject.
    http://help.sap.com/saphelp_nw04/helpdata/en/cf/21eea5446011d189700000e8322d00/content.htm
    GO TO SE11
    Select the radio button "Lock object"..
    Give the name starts with EZ or EY..
    Example: EYTEST
    Press Create button..
    Give the short description..
    Example: Lock object for table ZTABLE..
    In the tables tab..Give the table name..
    Example: ZTABLE
    Save and generate..
    Your lock object is now created..You can see the LOCK MODULES..
    In the menu ..GOTO -> LOCK MODULES..There you can see the ENQUEUE and DEQUEUE function
    Lock objects:
    http://www.sap-img.com/abap/type-and-uses-of-lock-objects-in-sap.htm
    http://help.sap.com/saphelp_nw04s/helpdata/en/cf/21eea5446011d189700000e8322d00/content.htm
    Match Code Objects:
    http://help.sap.com/saphelp_nw2004s/helpdata/en/41/f6b237fec48c67e10000009b38f8cf/content.htm
    http://searchsap.techtarget.com/tip/0,289483,sid21_gci553386,00.html
    See this link:
    http://www.sap-img.com/abap/type-and-uses-of-lock-objects-in-sap.htm
    Check these links -
    lock objects
    Lock Objects
    Lock Objects
    Regards.
    Sowjanya.B.

  • Lock Objects Problem while updating entries in custom table

    Hi Friends,
    Iam updating a custom table ztable from internal table entries.
    ie : Modify ZTABLE from table ITAB.
    Now the entries are updating and inserting perfectly..
    But my problem is i need to use lock objects before doing this..
    I have created a lock obect EZTABLE with all th ekey fields of the table.. ie : it has 2 key fields
    item & matnr .
    Now how to use lock objects here.. do i need to loop the internal table and use enque & deque function module each and every time in loop or use it out side the loop..
    Can any one explain me this..
    Regards,
    Kumar

    hi kumar,
    **check if the equipment is already locked by user, if yes, trigger a mail
                CALL FUNCTION 'ENQUEUE_EIEQUI'
                 EXPORTING
                MODE_EQUI            = 'E'
                MANDT                = SY-MANDT
                   equnr                = lv_equi_temp
                X_EQUNR              = ' '
                _SCOPE               = '2'
                _WAIT                = ' '
                _COLLECT             = ' '
                 EXCEPTIONS
                   foreign_lock         = 1
                   system_failure       = 2
                   OTHERS               = 3.
                IF sy-subrc <> 0.
                  lv_subrc1 =  sy-subrc.
    MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
            WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
                ELSE.
                  CALL FUNCTION 'DEQUEUE_EIEQUI'
                   EXPORTING
                MODE_EQUI       = 'E'
                MANDT           = SY-MANDT
                     equnr           =  lv_equi_temp
                X_EQUNR         = ' '
                _SCOPE          = '3'
                _SYNCHRON       = ' '
                _COLLECT        = ' '
                ENDIF.
    try like this to check if the object is locked....
    u can also use
    call function 'ENQUEUE,.
    do the needful changes update the database then commit work
    then call function 'DEQUEUE'
    hope this helps,
    tanmaya

  • Locking the Custom table

    I have a custom tble zcustom_tab. I am modifying the entries in the program .  Right now i am locking the table.
    Now instead of table locking, i want the record level locking.
    How ?

    Hi,
    try if this code helps.
    *& Report  ZLOCKING                                                    *
    REPORT  zlocking                                .
    DATA : tab_emp TYPE TABLE OF zemp_51772,
           wa_emp TYPE zemp_51772.
    wa_emp-emp_no = '102'.
    wa_emp-emp_id = '157'.
    wa_emp-emp_name = 'SIVA'.
    wa_emp-emp_dept = 'SAP'.
    APPEND wa_emp TO tab_emp.
    CLEAR wa_emp.
    wa_emp-emp_no = '128'.
    wa_emp-emp_id = '138'.
    wa_emp-emp_name = 'RAMA'.
    wa_emp-emp_dept = 'SAP'.
    APPEND wa_emp TO tab_emp.
    CLEAR wa_emp.
    wa_emp-emp_no = '133'.
    wa_emp-emp_id = '121'.
    wa_emp-emp_name = 'KRISHNA'.
    wa_emp-emp_dept = 'SAP'.
    APPEND wa_emp TO tab_emp.
    CLEAR wa_emp.
    CALL FUNCTION 'ENQUEUE_E_TABLEE'
    EXPORTING
       mode_rstable         = 'X'
       tabname              = 'ZEMP_51772'
      varkey               =
      X_TABNAME            = ' '
      X_VARKEY             = ' '
      _SCOPE               = '2'
      _WAIT                = ' '
      _COLLECT             = ' '
    EXCEPTIONS
       foreign_lock         = 1
       system_failure       = 2
       OTHERS               = 3
    IF sy-subrc EQ 0.
      INSERT zemp_51772 FROM TABLE tab_emp.
    ENDIF.
    CALL FUNCTION 'DEQUEUE_E_TABLEE'
    EXPORTING
       mode_rstable       = 'X'
       tabname            = 'ZEMP_51772'
      VARKEY             =
      X_TABNAME          = ' '
      X_VARKEY           = ' '
      _SCOPE             = '3'
      _SYNCHRON          = ' '
      _COLLECT           = ' '
    IF sy-subrc EQ 0.
      WRITE:/ 'Unlocked the Table'.
    ENDIF.
    Thanks&regards,
    Sravani.

  • "DBIF_RSQL_SQL_ERROR" "CX_SY_OPEN_SQL_DB" while updating the custom table

    hi friends...
    i am posting fico document using bapi BAPI_ACC_GL_POSTING_POST.
    after that i am updating the document number to my custom table.
    but in some cases while updating the document in my custom table i am getting the fallowing dump..
    in ST22
    How to correct the error:
    Database error text........: "[1205] Transaction (Process ID 66) was deadlocked
    on lock resources with another process and has been chosen as the deadlock
    victim. Rerun the transaction."
    Internal call code.........: "[RSQL/UPDT/ZIF004_PKT ]"
    Please check the entries in the system log (Transaction SM21).
    If the error occures in a non-modified SAP program, you may be able to
    find an interim solution in an SAP Note.
    If you have access to SAP Notes, carry out a search with the following
    keywords:
    "DBIF_RSQL_SQL_ERROR" "CX_SY_OPEN_SQL_DB"
    "ZFI_01_MONTHLY_RESULT_FRM_PKT" or "ZFI_01_MONTHLY_RESULT_FRM_PKT"
    "UPLOAD_SAP"
    Source Code Extract
    LOOP AT i_zif004_pkt_sum .
    UPDATE zif004_pkt SET xblnr = i_zif004_pkt_sum-xblnr ---> i am getting DUMP here
                              gjahr = i_zif004_pkt_sum-gjahr
                              sap_flag_posting = i_zif004_pkt_sum-sap_flag_posting
                          WHERE compcode = i_zif004_pkt_sum-compcode
                         AND ccode = i_zif004_pkt_sum-ccode
                          AND wbselement = i_zif004_pkt_sum-wbselement
                          AND kostl = i_zif004_pkt_sum-kostl
                          AND code = i_zif004_pkt_sum-code
                          AND month1 = l_ltx
                          AND year1 = p_year.
        IF sy-subrc = 0.
          WRITE :/ 'Document ', i_zif004_pkt_sum-xblnr, 'is posted for ', i_zif004_pkt_sum-code.
        ENDIF.
      ENDLOOP.
    kindly give some inputs..
    regards
    Selva

    Hi,
    You will face this issue if your oracle data base is lack of work processes. try to check the work processes and increase them if possible with the helps basis guys.
    check the below thread.
    DI job failed ORA-12537: TNS:connection closed.
    Regards,
    Venkatesh

  • Help on locking MySQL tables (many can read, but only one can write) Java

    Hi there,
    I have a question regarding locking of tables so that only one person can write to the file, but many are able to read the files (or tables entities).
    I am not sure if I need to lock the tables in my Java code or do I lock the tables within the MySQL syntax. I'm just a little confused on the matter.
    This java code is a working prototype of inserting a customer data into the database and that works fine. I just don't know how to implement it so that only one person can update the table at a time.
    Here is the Customer.java code that I have written.
    Help would be greatly appreciated, thanks so much.
    package business;
    //~--- non-JDK imports --------------------------------------------------------
    import shared.info.CustomerInfo;
    //~--- JDK imports ------------------------------------------------------------
    import java.sql.*;
    * @author
    public class Customer {
        static Connection    con  = DBConnection.getConnection();
        private CustomerInfo info = new CustomerInfo();
        private String               customerID;
        private String               firstName;
        private String               lastName;
        private String               email;
        private String               addressID;
        private String               homePhone;
        private String               workPhone;
        private String               unitNum;
        private String               streetNum;
        private String               streetName;
        private String               city;
        private String               provinceState;
        private String               country;
        private String               zipPostalCode;
        public Customer(String id) {
            try {
                PreparedStatement pstmt = con.prepareStatement("SELECT * FROM " +
                        "Customer NATURAL JOIN Address WHERE CustomerID = ?");
                pstmt.setString(1, id);
                ResultSet rs = pstmt.executeQuery();
                while (rs.next()) {
                    customerID    = rs.getString("CustomerID");
                    firstName     = rs.getString("FirstName");
                    lastName      = rs.getString("LastName");
                    homePhone     = rs.getString("HomePhone");
                    workPhone     = rs.getString("WorkPhone");
                    email         = rs.getString("Email");
                    city          = rs.getString("City");
                    provinceState = rs.getString("ProvinceState");
                    country       = rs.getString("Country");
                    zipPostalCode = rs.getString("ZipPostalCode");
                    unitNum       = rs.getString("UnitNum");
                    streetNum     = rs.getString("StreetNum");
                    streetName    = rs.getString("StreetName");
                    addressID     = rs.getString("AddressId");
            } catch (SQLException e) {
                e.printStackTrace();
            info.setCustomerID(customerID);
            info.setFirstName(firstName);
            info.setLastName(lastName);
            info.setHomePhone(homePhone);
            info.setWorkPhone(workPhone);
            info.setEmail(email);
            info.setCity(city);
            info.setProvinceState(provinceState);
            info.setCountry(country);
            info.setZipPostalCode(zipPostalCode);
            info.setUnitNum(unitNum);
            info.setStreetNum(streetNum);
            info.setStreetName(streetName);
            info.setAddressID(addressID);
        public static void addCustomer(CustomerInfo cust) {
            try {
                int id = -1;
                PreparedStatement pstmt = con.prepareStatement("INSERT INTO Address" +
                        "(UnitNum, StreetNum, StreetName, City, ProvinceState, Country," +
                        " ZipPostalCode) VALUES(?, ?, ?, ?, ?, ?, ?)");
                pstmt.setString(1, cust.getUnitNum());
                pstmt.setString(2, cust.getStreetNum());
                pstmt.setString(3, cust.getStreetName());
                pstmt.setString(4, cust.getCity());
                pstmt.setString(5, cust.getProvinceState());
                pstmt.setString(6, cust.getCountry());
                pstmt.setString(7, cust.getZipPostalCode());
                pstmt.executeUpdate();
                ResultSet rs = pstmt.getGeneratedKeys();
                rs.next();
                id = rs.getInt(1);
                pstmt = con.prepareStatement("INSERT INTO Customer" +
                        "(FirstName, LastName, HomePhone, WorkPhone, Email, AddressID)"
                        + "VALUES(?, ?, ?, ?, ?, ?)");
                pstmt.setString(1, cust.getFirstName());
                pstmt.setString(2, cust.getLastName());
                pstmt.setString(3, cust.getHomePhone());
                pstmt.setString(4, cust.getWorkPhone());
                pstmt.setString(5, cust.getEmail());
                pstmt.setInt(6, id);
                pstmt.executeUpdate();
            } catch (SQLException e) {
                e.printStackTrace();
        public void setFirstName(String newName) {
            try {
                PreparedStatement pstmt = con.prepareStatement("UPDATE Customer"
                                              + " SET FirstName = ? WHERE CustomerID = ?");
                pstmt.setString(1, newName);
                pstmt.setString(2, customerID);
                pstmt.executeUpdate();
            } catch (SQLException e) {
                e.printStackTrace();
            firstName = newName;
        public void setLastName(String newName) {
            try {
                PreparedStatement pstmt = con.prepareStatement("UPDATE Customer"
                                              + " SET LastName = ? WHERE CustomerID = ?");
                pstmt.setString(1, newName);
                pstmt.setString(2, customerID);
                pstmt.executeUpdate();
            } catch (SQLException e) {
                e.printStackTrace();
            lastName = newName;
        public String getFirstName() {
            return firstName;
        public String getLastName() {
            return lastName;
        public void setHomePhone(String number) {
            try {
                PreparedStatement pstmt = con.prepareStatement("UPDATE Customer"
                                              + " SET HomePhone = ? WHERE CustomerID = ?");
                pstmt.setString(1, number);
                pstmt.setString(2, customerID);
                pstmt.executeUpdate();
            } catch (SQLException e) {
                e.printStackTrace();
            homePhone = number;
        public String getHomePhone() {
            return homePhone;
        public void setWorkPhone(String number) {
            try {
                PreparedStatement pstmt = con.prepareStatement("UPDATE Customer"
                                              + " SET WorkPhone = ? WHERE CustomerID = ?");
                pstmt.setString(1, number);
                pstmt.setString(2, customerID);
                pstmt.executeUpdate();
            } catch (SQLException e) {
                e.printStackTrace();
            workPhone = number;
        public String getWorkPhone() {
            return workPhone;
        public void setEmail(String email) {
            try {
                PreparedStatement pstmt = con.prepareStatement("UPDATE Customer" + " SET Email = ? WHERE CustomerID = ?");
                pstmt.setString(1, email);
                pstmt.setString(2, customerID);
                pstmt.executeUpdate();
            } catch (SQLException e) {
                e.printStackTrace();
            this.email = email;
        public String getEmail() {
            return email;
        public void setUnitNum(String num) {
            try {
                PreparedStatement pstmt = con.prepareStatement("UPDATE Address" + " SET UnitNum = ? WHERE AddressId = ?");
                pstmt.setString(1, num);
                pstmt.setString(2, addressID);
                pstmt.executeUpdate();
            } catch (SQLException e) {
                e.printStackTrace();
            unitNum = num;
        public String getUnitNum() {
            return unitNum;
        public void setCity(String city) {
            try {
                PreparedStatement pstmt = con.prepareStatement("UPDATE Address" + " SET City = ? WHERE AddressId = ?");
                pstmt.setString(1, city);
                pstmt.setString(2, addressID);
                pstmt.executeUpdate();
            } catch (SQLException e) {
                e.printStackTrace();
            this.city = city;
        public String getCity() {
            return city;
        public void setStreetNum(String num) {
            try {
                PreparedStatement pstmt = con.prepareStatement("UPDATE Address" + " SET StreetNum = ? WHERE AddressId = ?");
                pstmt.setString(1, num);
                pstmt.setString(2, addressID);
                pstmt.executeUpdate();
            } catch (SQLException e) {
                e.printStackTrace();
            streetNum = num;
        public String getStreetNum() {
            return streetNum;
        public void setStreetName(String name) {
            try {
                PreparedStatement pstmt = con.prepareStatement("UPDATE Address"
                                              + " SET StreetName = ? WHERE AddressId = ?");
                pstmt.setString(1, name);
                pstmt.setString(2, addressID);
                pstmt.executeUpdate();
            } catch (SQLException e) {
                e.printStackTrace();
            streetName = name;
        public String getStreetName() {
            return streetName;
        public void setZipPostalCode(String code) {
            try {
                PreparedStatement pstmt = con.prepareStatement("UPDATE Address"
                                              + " SET ZipPostalCode = ? WHERE AddressId = ?");
                pstmt.setString(1, code);
                pstmt.setString(2, addressID);
                pstmt.executeUpdate();
            } catch (SQLException e) {
                e.printStackTrace();
            zipPostalCode = code;
        public String getZipPostalCode() {
            return zipPostalCode;
        public CustomerInfo getInfo(){
            return info;
        static void deleteCustomer(String customerId) {
            try{
                PreparedStatement pstmt = con.prepareStatement("DELETE FROM Customer" +
                        " WHERE CustomerId = ?");
                pstmt.setString(1, customerId);
                pstmt.executeUpdate();
            }catch(SQLException e){
                e.printStackTrace();
        static void updateCustomer(CustomerInfo custInf) {
            try{
                PreparedStatement pstmt = con.prepareStatement("UPDATE customer" +
                        " SET firstName = ?, SET lastName = ?," +
                        " SET homePhone = ?, SET workPhone = ?, SET email = ?" +
                        " WHERE CustomerId = ?");
                pstmt.setString(1, custInf.getFirstName());
                pstmt.setString(2, custInf.getLastName());
                pstmt.setString(3, custInf.getHomePhone());
                pstmt.setString(4, custInf.getWorkPhone());
                pstmt.setString(5, custInf.getEmail());
                pstmt.setString(6, custInf.getCustomerID());
                pstmt.executeUpdate();
                pstmt = con.prepareStatement("UPDATE address" +
                        " SET unitNum = ?, SET StreetNum = ?, SET StreetName = ?," +
                        " SET city = ?,SET Province = ?,SET country = ?,SET ZipPostalCode = ?" +
                        " WHERE AddressId = ?");
                pstmt.setString(1, custInf.getUnitNum());
                pstmt.setString(2, custInf.getStreetNum());
                pstmt.setString(3, custInf.getStreetName());
                pstmt.setString(4, custInf.getCity());
                pstmt.setString(5, custInf.getProvinceState());
                pstmt.setString(6, custInf.getCountry());
                pstmt.setString(7, custInf.getZipPostalCode());
                pstmt.setString(8, custInf.getAddressID());
                pstmt.executeUpdate();
            }catch(SQLException e){
                e.printStackTrace();
    }In addition, here is my customer sql table.
    -- Table structure for table `customer`
    DROP TABLE IF EXISTS `customer`;
    CREATE TABLE `customer` (
    `CustomerID` mediumint(9) NOT NULL auto_increment,
    `FirstName` varchar(20) NOT NULL,
    `LastName` varchar(20) NOT NULL,
    `HomePhone` varchar(11) NOT NULL,
    `WorkPhone` varchar(11) default NULL,
    `Email` varchar(20) NOT NULL,
    `AddressID` mediumint(9) default NULL,
    PRIMARY KEY (`CustomerID`),
    KEY `AddressID` (`AddressID`),
    CONSTRAINT `customer_ibfk_1` FOREIGN KEY (`AddressID`) REFERENCES `address` (`AddressID`)
    ) ENGINE=InnoDB DEFAULT CHARSET=latin1;
    -- Dumping data for table `customer`
    LOCK TABLES `customer` WRITE;
    /*!40000 ALTER TABLE `customer` DISABLE KEYS */;
    /*!40000 ALTER TABLE `customer` ENABLE KEYS */;
    UNLOCK TABLES;

    to the best of my knowledge, this is something related to the database and not the programming. If you'd want to be the only user to read and edit the table, speicify only one user with that privilege and make it password protected. User must enter the password to write to the tables.

  • Lock Object (Not locking the table)

    Hi Guys
    I have a custom table ZDRAD same like standard table DRAD with an additional 'DATE' field . ZDRAD's Key fields are same like DRAD . I have created a lock object 'EZDRAD' where I put name = 'ZDRAD' (Custom table) and mode = 'EXCLUSIVE CUMULATIVE' . Now I want to lock the table(Whole table) before modifying/Inserting/deleting the records in se38. Please check the code below and suggest me if I am passing wrong values to the lock object Function module.
    Code
    TABLES : ZDRAD.
    CALL FUNCTION 'ENQUEUE_EZDRAD'
    EXPORTING
       MODE_ZDRAD           = 'E'
       MANDT                = SY-MANDT
       DOKAR                = ' '
       DOKNR                = ' '
       DOKVR                = ' '
       DOKTL                = ' '
       DOKOB                = ' '
       OBZAE                = 0
       OBJKY                = ' '
       X_DOKAR              = ' '
       X_DOKNR              = ' '
       X_DOKVR              = ' '
       X_DOKTL              = ' '
       X_DOKOB              = ' '
       X_OBZAE              = ' '
       X_OBJKY              = ' '
       _SCOPE               = '2'
       _WAIT                = 'X'
       _COLLECT             = ' '
    EXCEPTIONS
       FOREIGN_LOCK         = 1
       SYSTEM_FAILURE       = 2
       OTHERS               = 3
    *IF SY-SUBRC <> 0.
    MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
            WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
    *ENDIF.
    IF SY-SUBRC = 0.
    ZDRAD table is locked.
        P_L_LOCK_STAT = 'X'.
        EXIT.
      ELSE.
    ZDRAD table is not locked
        CLEAR P_L_LOCK_STAT .
      ENDIF.

    Hi Kanthimathi
    That is numeric field . Please suggest me how can i check the lock.

  • An error occurred in lock management when attempting to set a lock on table

    Hi All,
    I am getting the error 'An error occurred in lock management when attempting to set a lock on table SWWWIHEAD.'
    Sometimes the workitem is not created by the Workflow due to above error & this happens rarely but keeps coming.
    cany anyone guide or help me how to correct this problem.Is it happening due to my custom code making locks on the above table?
    Thanks in advance.
    Pls do reply

    I think you should not use any code to lock the table SWWWIHEAD.  Please let us know why you are writing code to put lock on this table.
    Thanks
    Arghadip

  • Is it Necessary to lock the table while accessing the entries from table

    Hi Gurus,
    While optimization of the Program i came through one type of coding is in  inside the Loop of The internal table  which is processing BDC call transcation through updating the Custom table.
    Before processing the BDC, the Custom table has been locked and read the entries from same custom  table ,if the process fails then it waits for another 20 seconds and retrying the same for another time .I could not able to understand the Logic behind this.if it is not the Correct way then i can straight away remove this Part which is very well improve the perfromance of the Object.
    For Your Better Understanding i have attached the Snippet of the Code .Please find the Code and advice me the same .
    +LOOP AT i_stk_req INTO wa_stk_req.+
    +**  Lock is set to '0',meaning that no lock exist.+
        ++v_lock = 0.    "FALSE.++
    ++*   Preparing variable key for locking.++
        ++CLEAR v_key.++
        ++v_key = sy-mandt.++
        ++v_key+3(3) = wa_stk_req-lgnum.++
        ++v_key+6(4) = wa_stk_req-werks.++
        ++v_key+10(18) = wa_stk_req-matnr.++
        ++v_key+28(10) = wa_stk_req-charg.++
    ++*   Try to lock the row for max of 100 times.++
        ++DO 10 TIMES.++
    ++*     this perform sends sy-subrc EQ 1. in case of foreign lock.++
          +PERFORM enqueue_tab IN PROGRAM saplsvix USING 'ZSDT_STK_REQ'  v_key c_e c_e.+
          +IF sy-subrc EQ 0.          "If Enqueue is successful.+
    +**      set lock as TRUE+
            ++v_lock = 1.  "TRUE++
    ++*       selecting the latest entry for the table(Entry might have changed-refer to++
            +SELECT SINGLE *+
                    ++FROM zsdt_stk_req++
                    ++INTO wa_stk_req++
                   ++WHERE lgnum = wa_stk_req-lgnum++
                     ++AND werks = wa_stk_req-werks++
                     ++AND matnr = wa_stk_req-matnr++
                     ++AND charg = wa_stk_req-charg.++
            ++IF sy-subrc NE 0.        "Checking if select statement was successful++
    ++*         Unlock the table row.++
              ++PERFORM enqueue_tab IN PROGRAM saplsvix USING c_table v_key c_e c_d.++
              ++v_lock = 0.            "If unsuccessful.Then we set lock as FALSE.++
              ++EXIT.++
            ++ENDIF.++
            ++EXIT.++
    ++*     If unsuccessful in locking then wait for 1 sec.++
          +ELSE.+
           +WAIT UP TO 20 SECONDS.+
          +ENDIF.+
    +** exit from DO. ENDDO.+
        ++ENDDO.++
    ++*   v_lock will be FALSE if all attempts for lock was unsuccessful or++
    ++*   if there is a problem in select single after lock.++
        ++IF v_lock = 0.++
          ++NEW-PAGE.++
          ++CLEAR v_display.++
          ++CONCATENATE text-004 text-012 wa_stk_req-matnr text-011 wa_stk_req-werks++
                      ++text-019 wa_stk_req-lgnum text-020 wa_stk_req-charg INTO v_display SEPARATED BY space.++
          ++WRITE :/ v_display.++
        ++ENDIF.++
    ++*   Only to process if lock is successful.++
        ++CHECK v_lock NE 0.++
    ++*   If UPDATE IS FALSE that means that no updates need to be done.++
    ++*   So we set v_update as FALSE in its initial state.++
        ++v_update = 0.++
    ++* Begin of Insert Optima App - 053++
      ++SELECT   lgnum++
               ++lqnum++
               ++matnr++
               ++werks++
               ++charg++
               ++lgtyp++
               ++meins++
               ++verme++
               ++lgort++
               ++qplos++
               ++bestq++
          ++FROM lqua++
          ++INTO TABLE i_lqua1++
         ++WHERE lgnum EQ wa_lqua-lgnum++
           ++AND matnr EQ wa_lqua-matnr++
           ++AND werks EQ wa_lqua-werks++
           ++AND charg EQ wa_lqua-charg++
           ++AND bestq EQ wa_lqua-bestq++
           ++AND lgort EQ wa_lqua-lgort++
           ++AND verme GE 0.++
    ++* End of Insert Optima App - 053++
    ++*   IF a requirement still exists.++
        ++IF wa_stk_req-verme > 0.++
          ++LOOP AT i_lqua INTO wa_lqua WHERE bestq  = 'Q'++
                                      ++AND   qplos  NE 0++
                                      ++AND   lgnum  =  wa_stk_req-lgnum++
                                      ++AND   werks  =  wa_stk_req-werks++
                                      ++AND   matnr  =  wa_stk_req-matnr++
                                      ++AND   charg  =  wa_stk_req-charg.++
            ++CLEAR v_target.++
            ++CHECK wa_stk_req-lgtyp = wa_lqua-lgtyp OR wa_stk_req-lgtyp IS INITIAL.++
    ++*       checking if still some stock needs to be transported.++
            ++IF wa_stk_req-verme < 0.++
              ++EXIT.++
            ++ENDIF.++
    ++*       we need to send the entire lot if the stock belongs to quality inspection++
            ++IF wa_stk_req-verme >= wa_lqua-verme.++
              ++IF wa_stk_req-lgort IS INITIAL.++
    ++*           fetch the Storage location value from the two custom tables.++
                ++PERFORM f_fetch_lgort.++
              ++ELSE.++
                ++v_lgort = wa_stk_req-lgort.++
              ++ENDIF.++
    ++*         checking if v_lgort is not initial.++
              ++CHECK NOT v_lgort IS INITIAL.++
    ++*         Calling QAC2++
              ++PERFORM f_qac2.++
    ++*         Checking if Post Good was successful.++
              +IF NOT wa_qamb-mblnr IS INITIAL.+
               +REFRESH i_lqua1.+
                +SELECT   lgnum+
                         +lqnum+
                         +matnr+
                         +werks+
                         +charg+
                         +lgtyp+
                         +meins+
                         +verme+
                         +lgort+
                         +qplos+
                         +bestq+
                    +FROM lqua+
                    +INTO TABLE i_lqua1+
                   +WHERE lgnum EQ wa_lqua-lgnum+
                     +AND matnr EQ wa_lqua-matnr+
                     +AND werks EQ wa_lqua-werks+
                     +AND charg EQ wa_lqua-charg+
                     +AND bestq EQ wa_lqua-bestq+
                     +AND lgort EQ wa_lqua-lgort+
                     +AND verme GE 0.+
                +SORT i_lqua1 BY lgtyp.+
                +CLEAR: wa_lqua1,+
                       +v_position.+
                +READ TABLE i_lqua1 INTO wa_lqua1 WITH KEY lgtyp = wa_lqua-lgtyp.+
                +IF sy-subrc EQ 0.+
                  +v_position = sy-tabix.+
                +ENDIF.+
                +SELECT SINGLE lgnum+
                               +ubnum+
                          +FROM lubu+
                          +INTO wa_lubu+
                          +WHERE lgnum = wa_lqua-lgnum+
                            +AND mblnr = wa_qamb-mblnr.+
                +CLEAR i_bdcdata.+
                +REFRESH i_bdcdata.+
                +REFRESH i_messtab.+
                +CLEAR wa_bdcdata.+
                +wa_bdcdata-program  = 'SAPML03T' .+
                +wa_bdcdata-dynpro   = '0141' .+
                +wa_bdcdata-dynbegin = 'X' .+
                +APPEND wa_bdcdata TO i_bdcdata .+
                +CLEAR wa_bdcdata .+
                +wa_bdcdata-fnam = 'BDC_OKCODE' .+
                +wa_bdcdata-fval = '/00' .+
                +APPEND wa_bdcdata TO i_bdcdata .+
                +CLEAR wa_bdcdata .+
                +wa_bdcdata-fnam = 'LUBU-UBNUM'.+
                +wa_bdcdata-fval = wa_lubu-ubnum.+
                +APPEND wa_bdcdata TO i_bdcdata .+
                +CLEAR wa_bdcdata .+
                +wa_bdcdata-fnam = 'LUBU-LGNUM'.+
                +wa_bdcdata-fval = wa_lqua-lgnum.+
                +APPEND wa_bdcdata TO i_bdcdata .+
                +CLEAR wa_bdcdata .+
                +wa_bdcdata-fnam = 'RL03T-DUNKL'.+
                +wa_bdcdata-fval = 'H'.+
                +APPEND wa_bdcdata TO i_bdcdata .+
                +CLEAR wa_bdcdata.+
                +wa_bdcdata-program  = 'SAPML03T' .+
                +wa_bdcdata-dynpro   = '0143' .+
                +wa_bdcdata-dynbegin = 'X' .+
                +APPEND wa_bdcdata TO i_bdcdata .+
                +CONCATENATE 'RL03T-SELKZ('+
                            +v_position+
                            +')'+
                      +INTO  v_str.+
                +CLEAR wa_bdcdata .+
                +wa_bdcdata-fnam = v_str.+
                +wa_bdcdata-fval = 'X'.+
                +APPEND wa_bdcdata TO i_bdcdata .+
                +CLEAR wa_bdcdata .+
                +wa_bdcdata-fnam = 'BDC_OKCODE' .+
                +wa_bdcdata-fval = 'BU' .+
                +APPEND wa_bdcdata TO i_bdcdata .+
                +CLEAR wa_bdcdata.+
                +wa_bdcdata-program  = 'SAPML03T' .+
                +wa_bdcdata-dynpro   = '0142' .+
                +wa_bdcdata-dynbegin = 'X' .+
                +APPEND wa_bdcdata TO i_bdcdata .+
                +CLEAR wa_bdcdata .+
                +wa_bdcdata-fnam = 'BDC_OKCODE' .+
                +wa_bdcdata-fval = 'BU' .+
                +APPEND wa_bdcdata TO i_bdcdata .+
    +*......changes as per ticket 44206+
    ++*            CLEAR wa_bdcdata .++
    ++*            wa_bdcdata-fnam = 'LQUAU-KZUAP(01)'.++
    ++*            wa_bdcdata-fval = 'X'.++
    ++*            APPEND wa_bdcdata TO i_bdcdata .++
    +*......end of changes as per ticket 44206+
                +CALL TRANSACTION 'LT05' USING i_bdcdata+
                                        +OPTIONS FROM wa_ctu_params+
                                        +MESSAGES INTO i_messtab.+
    Regards,
    Raja

    hi , please check the link below
    [http://help.sap.com/saphelp_nw70/helpdata/en/41/7af4c5a79e11d1950f0000e82de14a/content.htm|http://help.sap.com/saphelp_nw70/helpdata/en/41/7af4c5a79e11d1950f0000e82de14a/content.htm]

  • Updating Custom Table Only in Debug Mode

    Hi All!
    I have been encountering issues in updating a custom table. It would work successfully only in debug mode otherwise it won't update an entry in the table.
    This is the piece of code that would update an entry in the table specifically used in a user exit. The functionality of this code is to automatically remove a transportation block:
    SELECT SINGLE *
    INTO wa_zblock
    FROM zblock
    WHERE zzblknum EQ c_tr01
    AND vbeln EQ p_lvbeln
    AND zzprocessed EQ space.
    IF sy-subrc EQ 0.
    DO.
    CALL FUNCTION 'ENQUEUE_E_TABLES'
    EXPORTING
    MODE_RSTABLE = 'S'
    TABNAME = c_lzblock
    EXCEPTIONS
    FOREIGN_LOCK = 1
    SYSTEM_FAILURE = 2
    OTHERS = 3.
    IF sy-subrc EQ 0.
    wa_zblock-zzprocessed = c_x.
    wa_zblock-zzapproveby = sy-uname.
    wa_zblock-zzapproveon = sy-datum.
    MODIFY zblock FROM wa_zblock.
    if sy-subrc EQ 0.
    COMMIT WORK AND WAIT.
    endif.
    EXIT.
    ENDIF.
    ENDDO.
    CALL FUNCTION 'DEQUEUE_E_TABLES'
    EXPORTING
    MODE_RSTABLE = 'S'
    TABNAME = c_lzblock.
    ENDIF.
    How can I make this update the custom table successful in undebugged mode? Please let me know your thoughts on this.
    Thanks!

    I also suggest you to lock only the entry that will be updated (and not the whole table!) : you will have then far less problems of conflict with updating this table.
    For that, you have to create a lock object on your table (via SE11 - for example EZ_MY_TABLE). This will create 2 function modules named ENQUEUE_E<name of your lock object> (in my example ENQUEUE_EZ_MY_TABLE) and DEQUEUE_E<...>.
    You can then call those FM like this :
    CALL FUNCTION 'ENQUEUE_EZ_MY_TABLE'
      EXPORTING
        MODE_RSTABLE = 'S'
        KEYFIELD1 = ld_keyfield1  " Here are the key values for the entry that you have to update
        KEYFIELD2 = ld_keyfield2
      EXCEPTIONS
        FOREIGN_LOCK = 1
        SYSTEM_FAILURE = 2
        OTHERS = 3.
    Best regards,
    Samuel

  • Tracking the custom table changes

    Hai,
    plz let me know how to track the changes in custom table?
    thankyou.
    Moderator message: please search for available information before asking.
    locked by: Thomas Zloch on Sep 17, 2010 12:55 PM

    Please SEARCH in SCN before posting.

  • DEAD LOCKS on table ARFCSSTATE

    Please help!
    Essentially the problem is that anything that updates the customer master (T/C BP) causes DEAD LOCKS on table ARFCSSTATE and the queues either slow down terrible or they hang (stop).  When one tries to delete an entry in the queue a screen dump takes place – DBIF_RSQL_SQL_ERROR in ARFC_RUN.
    We are using: CRM 3.0 with the following service packs:
    SAP Basis release 610 level 38
    SAP ABA Release 50A level 38
    BBPCRM Release 300 level 17
    Points will be given.
    Thank you.

    Hi Surendra,
    I was expirenced with the error, Basis people had resolved that for me,
    better to post this issue to them,
    this problem for all data sources or any perticulat data source when scheduling infopackage.
    Regards
    Vijay

  • Best way to update custom table

    Hello experts,
    Iu2019m writing a report program and after pulling data from a custom table Iu2019m modifying certain fields within internal table and then eventually update custom table. The way Iu2019m updating custom table is working fine. However Iu2019m concern about performance issues because Iu2019m doing update on custom table within loop.
    Here is my code for reference.
    *&      Form  update_contracts
          text
    -->  p1        text
    <--  p2        text
    FORM update_contracts .
    Update record in an internal table first
      loop at izsc_compliance into wa_zsc_compliance..
        wa_zsc_compliance-zapproval = c_accepted.
        wa_zsc_compliance-CHANGED_DT = sy-datum.
        wa_zsc_compliance-CHANGED_TM = sy-uzeit.
        wa_zsc_compliance-CHANGED_BY = sy-uname.
        modify izsc_compliance from wa_zsc_compliance index sy-tabix.
        write:/ sy-tabix, wa_zsc_compliance-vbeln_new, wa_zsc_compliance-zapproval.
        if p_test is initial.
          move wa_zsc_compliance to zsc_compliance.
          update zsc_compliance.
        endif..
      endloop.
    Write records to database
      if p_test = 'X'.
        skip.
        write:/ 'Test mode'.
      endif.
    ENDFORM.                    " update_contracts
    Iu2019m not certain if there is any better way by not doing update within loop and update custom table outside this loop.
    Many thanks in advance.

    Hi,
    Yes, there is a better way to update the custom table. That will be more performance oriented and will be a much cleaner approach. As, I am not much aware of the custom table structure which you have in your program, the best way that I can suggest is to remove the update statement from that check. I guess you are checking against the mode - test or production. Once you have done the check, put the selected entries in an internal table which is same as database table. And then in a single command - a single array operation as it is commonly called, you can update the custom table.
    Have a look at the following link
    [Overwriting Several Lines Using an Internal Table|http://help.sap.com/saphelp_bw33/helpdata/en/fc/eb3a94358411d1829f0000e829fbfe/content.htm]
    [Inserting or Changing Lines|http://help.sap.com/saphelp_bw33/helpdata/en/fc/eb3ac8358411d1829f0000e829fbfe/content.htm]
    You can also scan the forum for multiple links and references and sample examples.
    Hope this will help. The above approach will be much more performance oriented and will help to optimize. Also, check where exactly you are providing the locking feature if at applicable in your business functionality.
    Regards,
    Samantak.

  • I want to update the Custom table using the data available in ITAB.

    Hi,
    I want to updaste the Custom Table which is created by me (Ztable) using the data available in itab.(which i got from defferent standard tables)
    I want to update the custom table using the itab data How is it possible?
    Is any possible by using Modify ?
    DPK.

    example here
    modifying datbase table useing internal table
    advises before updating this datbase table plz lock that table to avoid incosistency
    write the logic for modifying
    Modify the database table as per new dunning procedure
    MODIFY fkkvkp FROM TABLE lt_fkkvkp .
    and finally unlock the table
    example
    *To lock table for further operations
    constants: lc_tabname TYPE rstable-tabname VALUE 'FKKVKP' . "FKKVKP
    CALL FUNCTION 'ENQUEUE_E_TABLE'
    EXPORTING
    tabname = lc_tabname
    EXCEPTIONS
    foreign_lock = 1
    system_failure = 2
    OTHERS = 3.
    IF sy-subrc EQ 0.
    To fetch all the contract accounts for customers of the segment
    Households/SME.
    PERFORM fetch_contract_accounts using lc_tabname .
    ENDIF. " IF sy-subrc EQ 0.
    *wrote the logic
    Modify the database table as per new dunning procedure from internal table
    MODIFY fkkvkp FROM TABLE lt_fkkvkp .
    *unlock the tbale
    CALL FUNCTION 'DEQUEUE_E_TABLE'
    EXPORTING
    TABNAME = uc_tabname .

Maybe you are looking for

  • One parameter in open-doc url in webi not required

    Hi, I am using SAP BO4.0.I have made one open doc URL which links one report to another.While linking there is one extra parameter which have been added, means the linking in the first report is done for a prompt that is not present in the second rep

  • EL expressions showing up in my jsp textboxes

    I am trying to create a simple jsp model 1 architecture example. The application s a jsp page that posts to itself after using a javabean to calculate the roots of the quadratic equation based upon user input values for a, b, and c. However, when I l

  • Safari keeps closing web pages, quitting on new iPad Air?

    Any ideas?

  • Mac osx 10.8.1 high fan

    I upgraded to the latest version of OSX Mountain lion yesterday (10.8.1) and my battery is only lasting 90 minutes and the fans are constantly on with hardly anything running, just a web browser. The fans are constantly on and the computer is rather

  • After install of instant client 10.2, error Message file sp1 lang .msb not

    Greeting. I installed Oracle 10G. Was working great. then installed PHP5. working great. then TYPO3 (a web content manager) Still ok. then I wanted TYPO3 to user my oracle 10g server. One of the step was to install instant client (which I did) Then I