Distinct Clause missing on "Primary Key"

In our implementation, we have views and tables mixed physical Schema. For the views, obviously, they do not have to have 1 column as PK, but have a combination of columns to uniquely identify a record. Now when we use some of the views as dimension in our physical layer to do a join, it will automatically mark that joined column in the view as a "key" column, which makes sense.
Now, when we expose the very same column to the presentation, and then, do a query on that, it did not give use a distinct value of that column, instead, it give you 1 row per line. If I make a request by using columns with PK column from the same dimension table, it will not have a "Distnct" in the select statement , But if I put the PK column with other columns from a Fact table, it is then showing a "Distinct" clause in the select statement. In our situation, we need to have a distinct clause in the select statement, even there is no fact column involved.

By definition your key column(s) defined in the Physical and Logical models must be unique. If you have multiple rows returned for your key when selecting from just the dimension table then your key is incorrect.
If you are saying when you join to the fact you see multiple rows, then check you have set your aggregate functions correctly on your fact measures. ie. SUM/COUNT etc...
Hope this helps.

Similar Messages

  • Missing primary keys after import

    Hi,
    We receive a .dmp file from another company each night. The process changed when they started to obfuscate some sensitive data. But since then we are finding all the tables are missing their primary keys.
    I really would like to eliminate our import process as the cause.
    Has anyone ever heard of this kind of problem before? What was the cause/scenario.
    Your help is greatly appreciated.
    Brian

    If you are not getting any errors during the import process, it is pretty unlikely that the import process is at fault assuming that hasn't changed. Make sure that INDEXES=Y and CONSTRAINTS=Y are specified (which is the default).
    You can use the SHOW=Y parameter to have the import utility write the DDL contained in the dump file to a text file where you can manually verify that the primary key constraints you were expecting are indeed missing.
    Justin
    Edited by: Justin Cave on Nov 10, 2008 3:44 PM
    typo

  • Bug Report: APEX_APPLICATION_SUPP_OBJ_CHCK is missing primary key column

    Hi,
    the APEX dictionary view APEX_APPLICATION_SUPP_OBJ_CHCK is missing the primary key column INSTALL_ID.
    Actually it's in the view but commented out.
    Regards
    Patrick
    My APEX Blog: http://www.inside-oracle-apex.com
    The APEX Builder Plugin: http://builderplugin.oracleapex.info/
    The ApexLib Framework: http://apexlib.sourceforge.net/

    Hi Patrick,
    >> Just my (highly) trained eyes
    I knew I don’t have a chance :)
    >> Actually it's the APEX Essentials/APEX Advisor tool which is failing because I can't uniquely identify a record in the dictionary view.
    To find that out in the same day the patch is released is a bummer, but I hope you’ll find a way to work around it. Unfortunately, I can’t really help you there.
    Thanks,
    Arie.

  • Query to return list of all missing primary key ids from table T1

    I found this query online that returns a start and stop for a range of all missing primary key id values from table T1. However i want to rewrite this query to return a whole list of all the missing primary key ids and not a start and stop range. any help plz?
    select strt, stp
    from (select m.id + 1 as strt,
    (select min(id) - 1 from T1 x where x.id > m.id) as stp
    from T1 m left outer join T1 r on m.id = r.id - 1 where r.id is null)x where stp is not null

    with t as
              select  1 as id from dual union all
              select  2 as id from dual union all
              select  3 as id from dual union all
              select  5 as id from dual union all
              select  8 as id from dual union all
              select 10 as id from dual union all
              select 11 as id from dual union all
              select 20 as id from dual
    select  id_start + level missing_id
      from  (
             select  id id_start,
                     nullif(lead(id) over(order by id) - 1, id) id_end
               from  t
      start with id_end is not null
      connect by prior id_start = id_start
             and prior dbms_random.random is not null
             and level <= id_end - id_start
    MISSING_ID
             4
             6
             7
             9
            12
            13
            14
            15
            16
            17
            18
    MISSING_ID
            19
    12 rows selected.Or:
    with t as
              select  1 as id from dual union all
              select  2 as id from dual union all
              select  3 as id from dual union all
              select  5 as id from dual union all
              select  8 as id from dual union all
              select 10 as id from dual union all
              select 11 as id from dual union all
              select 20 as id from dual
    select  id_start + level - 1 missing_id
       from  (
              select  min(id) id_start,
                      max(id) id_end
                from  t
       connect by level <= id_end - id_start
    minus
    select  id
       from  t
    MISSING_ID
             4
             6
             7
             9
            12
            13
            14
            15
            16
            17
            18
    MISSING_ID
            19
    12 rows selected.SY.

  • Oh.. Primary key index is missing!

    Database: 10.2.0.4.0
    Platform : Linux
    SQL> SELECT CONSTRAINT_NAME,CONSTRAINT_TYPE,INDEX_NAME FROM DBA_CONSTRAINTS WHER
    E TABLE_NAME='ISSUE_COMMENTS';
    CONSTRAINT_NAME C STATUS VALIDATED
    SYS_C0031516 C ENABLED VALIDATED
    SYS_C0031517 C ENABLED VALIDATED
    SYS_C0031519 P ENABLED VALIDATED
    SQL> SELECT INDEX_NAME,TABLE_NAME FROM DBA_INDEXES WHERE TABLE_NAME='ISSUE_COMMENTS';
    INDEX_NAME TABLE_NAME
    INDEX_ISSUE_COMMENTS ISSUE_COMMENTS
    SQL> select distinct index_name,column_name,table_name from dba_ind_columns wher
    e table_name in ('ISSUE_COMMENTS');
    INDEX_NAME COLUMN_NAME TABLE_NAME
    INDEX_ISSUE_COMMENTS IDX ISSUE_COMMENTS
    INDEX_ISSUE_COMMENTS ISSUE_ID ISSUE_COMMENTS
    INDEX_ISSUE_COMMENTS PARENT_ID ISSUE_COMMENTS
    Where is the index for the primary key 'SYS_C0031519'?
    SQL>
    After droping and recreating the primary key also,just primary constrainy is created but there is no corresponding index.
    SQL> ALTER TABLE ISSUE_COMMENTS DROP CONSTRAINT SYS_C0031519;
    Table altered.
    SQL> ALTER TABLE ISSUE_COMMENTS ADD PRIMARY KEY (IDX)
    2 USING INDEX PCTFREE 10 INITRANS 2 MAXTRANS 255 COMPUTE STATISTICS
    3 STORAGE(INITIAL 32768 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
    4 PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT)
    5 TABLESPACE "TABLE_DATA" ENABLE;
    Table altered.
    SQL> SELECT CONSTRAINT_NAME,CONSTRAINT_TYPE,status,validated FROM DBA_CONSTRAINT
    S WHERE TABLE_NAME='ISSUE_COMMENTS';
    CONSTRAINT_NAME C STATUS VALIDATED
    SYS_C0031516 C ENABLED VALIDATED
    SYS_C0031517 C ENABLED VALIDATED
    SYS_C0034310 P ENABLED VALIDATED
    SQL> SELECT INDEX_NAME,TABLE_NAME FROM DBA_INDEXES WHERE TABLE_NAME='ISSUE_COMMENTS';
    INDEX_NAME TABLE_NAME
    INDEX_ISSUE_COMMENTS ISSUE_COMMENTS
    SQL> select distinct index_name,column_name,table_name from dba_ind_columns wher
    e table_name in ('ISSUE_COMMENTS');
    INDEX_NAME COLUMN_NAME TABLE_NAME
    INDEX_ISSUE_COMMENTS IDX ISSUE_COMMENTS
    INDEX_ISSUE_COMMENTS ISSUE_ID ISSUE_COMMENTS
    INDEX_ISSUE_COMMENTS PARENT_ID ISSUE_COMMENTS
    Here also, the primary key constraint SYS_C0034310 is available but there is no index for that primary key.
    Where the primary index has gone?

    MohanaKrishnan wrote:
    Database: 10.2.0.4.0
    Platform : Linux
    SQL> SELECT CONSTRAINT_NAME,CONSTRAINT_TYPE,INDEX_NAME FROM DBA_CONSTRAINTS WHER
    E TABLE_NAME='ISSUE_COMMENTS';
    CONSTRAINT_NAME C STATUS VALIDATED
    SYS_C0031516 C ENABLED VALIDATED
    SYS_C0031517 C ENABLED VALIDATED
    SYS_C0031519 P ENABLED VALIDATED
    Your first query is not consistent with the first set of results you have displayed.
    Your later query for index columns is also not very helpful as it won't list the column names in the right order.
    The probably answer to your question is that the index you have is non-unique and starts with the column you've used for the primary key, which means Oracle can use it to support the primary key constraint. Here's a quick cut-n-paste from a SQL*Plus session to demonstrate the point:
    SQL> create table t1 (n1 number, v1 varchar2(10));
    Table created.
    SQL> create index t1_n1 on t1(n1);
    Index created.
    SQL> alter table t1 add primary key(n1);
    Table altered.
    SQL> select index_name from user_indexes where table_name = 'T1';
    INDEX_NAME
    T1_N1
    1 row selected.
    SQL> select constraint_name, constraint_type, index_name from user_constraints
      2  where table_name = 'T1';
    CONSTRAINT_NAME      C INDEX_NAME
    SYS_C0033465         P T1_N1
    1 row selected.
    SQL> spool offNote how I've added a primary key with no name, and Oracle has decided to use the t1_n1 index to support it.
    Regards
    Jonathan Lewis
    http://jonathanlewis.wordpress.com
    http://www.jlcomp.demon.co.uk
    "Science is more than a body of knowledge; it is a way of thinking" Carl Sagan
    Edited by: Jonathan Lewis on Dec 31, 2008 2:16 PM
    Apologies to Satish - I didn't see either prior post

  • Index is missing for a specific Primary key.

    Hi All,
    Index is missing for a specific Primary key but for other PKs index is available (verified in metadata, USER_INDEXES).
    Status of problematic PK is enabled.  This issue is only in one environment and other envs index is associated with this PK without any issue.
    Could you please advice, what could the possible reason?
    Regards,
    Narasimha.

    What other indexes are on your table? You do not need a unique index to enforce a primary key:
    > create table bc (col1 number, col2 number);
    Table created.
    > create index bc_ix on bc (col1, col2);
    Index created.
    > alter table bc add constraint bc_pk primary key (col1) using index bc_ix;
    Table altered.
    > create unique index bc_pk on bc (col1);
    Index created.
    > select index_name, uniqueness from user_indexes where table_name = 'BC';
    INDEX_NAME                     UNIQUENES
    BC_IX                          NONUNIQUE
    BC_PK                          UNIQUE
    > select constraint_name, constraint_type from user_constraints where table_name = 'BC';
    CONSTRAINT_NAME                C
    BC_PK                          P
    > drop index bc_pk;
    Index dropped.
    > select index_name, uniqueness from user_indexes where table_name = 'BC';
    INDEX_NAME                     UNIQUENES
    BC_IX                          NONUNIQUE
    > select constraint_name, constraint_type, index_name from user_constraints where table_name = 'BC';
    CONSTRAINT_NAME                C INDEX_NAME
    BC_PK                          P BC_IX
    >

  • Missing Primary Keys after migartion of a MSAccess 2003 DB to oracle 9.i

    I migrate a MS Access 2003 DB to Oracle 9.i with the Oracle Migration Workbench 10.1.0.4.0. on a Windows 2k PC. All the Primary Keys of my tables are missed after migration and no Foreign Key is created.
    In the MS Access Source Model Window of OMWB are the Primary Keys detected but in migration script or in oracle db after migration there is no Primary Key applied.
    Dos anyone kows the reason for this behavior.
    Thanks for help in advance.
    Message was edited by:
    user468547
    Message was edited by:
    user468547

    Here the summary of the Model.
    Not mentioned parts are sero in the Oracle Model
    MS Access Source Model
    Table Violation Rules (0)
    Relations ( 48)
    Indexes (96)
    Primary Keys (38)
    Queries (0)
    Tables (38)
    Oracle Model
    Database (1)
    Check Constraints (0)
    Foreign Keys (48)
    Indexes (96)
    Primary Keys /Unique ... (0)
    Tables (38)
    Types (2)
    In the migration scripts the commands for creation of Foreign Keys are avaliable and delievers the error message ORA-02270. e.g.
    REM
    REM Message : Failed to create foreign key: dbwines.TBL_SERVICEPROFILESTBL_UETYPES; ORA-02270: no valid Primr- o. eindeutiger Key for this column
    Here the content of the error.log
    ** Workbench Repository : Oracle9i Enterprise Edition Release 9.2.0.1.0 - Production
    With the Partitioning, OLAP and Oracle Data Mining options
    JServer Release 9.2.0.1.0 - Production
    Repository Connection URL: jdbc:oracle:thin:@pcathlon17002:1521:ORCL
    ** The following plugins are installed:
    ** Microsoft Access 2.0/95/97/2000/2002/2003 Plugin, Production Release 10.1.0.4.0
    ** Active Plugin : MSAccess
    oracle.mtg.migration.MigrationSQLException: Failed to get information about Oracle Model Object.
    Erschpfte Ergebnismenge:Failed to get information about Oracle Model Object.
    Erschpfte Ergebnismenge
         at oracle.mtg.oracleModel.server.OracleModelImpl.getObjectInformation(OracleModelImpl.java:476)
         at oracle.mtg.oracleModel.ui.OracleModelTypes.getAllChildren(OracleModelTypes.java:95)
         at oracle.mtg.plugin.ui.WorkbenchAllTreeNode.getChildren(WorkbenchAllTreeNode.java:133)
         at oracle.mtg.migrationUI.TreeDataSource.getItemCount(TreeDataSource.java:128)
         at oracle.ewt.dTree.DTreeDeferredParent.getItemCount(Unknown Source)
         at oracle.ewt.dTree.DTreeBaseItem.isExpandable(Unknown Source)
         at oracle.ewt.dTree.DTreeButtonDecoration.getHasButton(Unknown Source)
         at oracle.ewt.dTree.DTreeButtonDecoration.paintDecoration(Unknown Source)
         at oracle.ewt.dTree.DTreeStackingDecoration.paintDecoration(Unknown Source)
         at oracle.ewt.dTree.DTree.paintCanvasInterior(Unknown Source)
         at oracle.ewt.EwtComponent.paintInterior(Unknown Source)
         at oracle.ewt.lwAWT.SharedPainter._paintInterior(Unknown Source)
         at oracle.ewt.lwAWT.SharedPainter.paintExtents(Unknown Source)
         at oracle.ewt.lwAWT.LWComponent._paintComponent(Unknown Source)
         at oracle.ewt.lwAWT.LWComponent.paint(Unknown Source)
         at oracle.ewt.EwtComponent.paint(Unknown Source)
         at oracle.ewt.lwAWT.SharedPainter.paintExtents(Unknown Source)
         at oracle.ewt.lwAWT.LWComponent._paintComponent(Unknown Source)
         at oracle.ewt.lwAWT.LWComponent.paint(Unknown Source)
         at oracle.ewt.EwtComponent.paint(Unknown Source)
         at oracle.ewt.lwAWT.SharedPainter.paintExtents(Unknown Source)
         at oracle.ewt.lwAWT.LWComponent._paintComponent(Unknown Source)
         at oracle.ewt.lwAWT.LWComponent.paint(Unknown Source)
         at oracle.ewt.lwAWT.SharedPainter.paintExtents(Unknown Source)
         at oracle.ewt.lwAWT.LWComponent._paintComponent(Unknown Source)
         at oracle.ewt.lwAWT.LWComponent.paint(Unknown Source)
         at oracle.ewt.lwAWT.SharedPainter.paintExtents(Unknown Source)
         at oracle.ewt.lwAWT.LWComponent._paintComponent(Unknown Source)
         at oracle.ewt.lwAWT.LWComponent.paint(Unknown Source)
         at oracle.ewt.EwtComponent.paint(Unknown Source)
         at oracle.ewt.lwAWT.SharedPainter.paintExtents(Unknown Source)
         at oracle.ewt.lwAWT.LWComponent._paintComponent(Unknown Source)
         at oracle.ewt.lwAWT.LWComponent.paint(Unknown Source)
         at oracle.ewt.lwAWT.SharedPainter.paintExtents(Unknown Source)
         at oracle.ewt.lwAWT.LWComponent._paintComponent(Unknown Source)
         at oracle.ewt.lwAWT.LWComponent.paint(Unknown Source)
         at oracle.ewt.EwtComponent.paint(Unknown Source)
         at oracle.ewt.lwAWT.SharedPainter.paintExtents(Unknown Source)
         at oracle.ewt.lwAWT.LWComponent._paintComponent(Unknown Source)
         at oracle.ewt.lwAWT.LWComponent.paint(Unknown Source)
         at oracle.ewt.EwtComponent.paint(Unknown Source)
         at oracle.ewt.lwAWT.SharedPainter.paintExtents(Unknown Source)
         at oracle.ewt.lwAWT.LWComponent._paintComponent(Unknown Source)
         at oracle.ewt.lwAWT.LWComponent.paint(Unknown Source)
         at oracle.ewt.lwAWT.SharedPainter.paintExtents(Unknown Source)
         at oracle.ewt.lwAWT.SharedPainter.paint(Unknown Source)
         at oracle.ewt.lwAWT.BufferedApplet.paint(Unknown Source)
         at oracle.ewt.lwAWT.BufferedApplet.update(Unknown Source)
         at sun.awt.RepaintArea.paint(Unknown Source)
         at sun.awt.windows.WComponentPeer.handleEvent(Unknown Source)
         at java.awt.Component.dispatchEventImpl(Unknown Source)
         at java.awt.Container.dispatchEventImpl(Unknown Source)
         at java.awt.Component.dispatchEvent(Unknown Source)
         at java.awt.EventQueue.dispatchEvent(Unknown Source)
         at java.awt.EventDispatchThread.pumpOneEventForHierarchy(Unknown Source)
         at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
         at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
         at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
         at java.awt.EventDispatchThread.run(Unknown Source)
    ** Shutdown : Mon Apr 10 18:36:10 CEST 2006
    ** Oracle Migration Workbench
    ** Production
    ** ( Build 20050629 )
    ** OMWB_HOME: C:\oracle\ora92\omwb
    ** user language: de
    ** user region: null
    ** user timezone:
    ** file encoding: Cp1252
    ** java version: 1.4.2_04
    ** java vendor: Sun Microsystems Inc.
    ** o.s. arch: x86
    ** o.s. name: Windows 2000
    ** o.s. version: 5.0
    ** Classpath:
    ..\lib\boot.jar
    ** Started : Mon Apr 10 18:36:14 CEST 2006
    ** Workbench Repository : Oracle9i Enterprise Edition Release 9.2.0.1.0 - Production
    With the Partitioning, OLAP and Oracle Data Mining options
    JServer Release 9.2.0.1.0 - Production
    Repository Connection URL: jdbc:oracle:thin:@pcathlon17002:1521:ORCL
    ** The following plugins are installed:
    ** Microsoft Access 2.0/95/97/2000/2002/2003 Plugin, Production Release 10.1.0.4.0
    ** Active Plugin : MSAccess
    EXCEPTION : query()java.sql.SQLException: Stream wurde schon geschlossen
    select MESSAGE_TYPE, LOG_ID, TO_CHAR(LOG_DATE, 'dd-MM-yyyy hh24:mi:ss') LOG_DATE, PROJECT_ID, PHASE, SUBPHASE, LOG_MESSAGE, OBJECT_TYPE, OBJECT_ID, CONTEXT_DATA from MTG_LOG_TABLE WHERE PROJECT_ID = 1 and (MESSAGE_TYPE != 9999) ORDER BY LOG_ID ASC
    java.lang.NullPointerException
         at oracle.mtg.migration.LogDisplayUtility.convertToDisplayStrings(LogDisplayUtility.java:185)
         at oracle.mtg.migrationServer.LoggingImpl.getLogs(LoggingImpl.java:482)
         at oracle.mtg.migrationUI.LoggingPane.setupLogTable(LoggingPane.java:291)
         at oracle.mtg.migrationUI.LoggingPane.setupLogTable(LoggingPane.java:280)
         at oracle.mtg.migrationUI.ProgressDialog.commandStarting(ProgressDialog.java:117)
         at oracle.mtg.migrationUI.MigrationUI.commandStarting(MigrationUI.java:2427)
         at oracle.mtg.migrationUI.MigrationWizard.doMigrate(MigrationWizard.java:401)
         at oracle.mtg.migrationUI.MigrationWizard.runDialog(MigrationWizard.java:293)
         at oracle.mtg.migrationUI.ActionMenuHandler._migrate(ActionMenuHandler.java:340)
         at oracle.mtg.migrationUI.ActionMenuHandler._capture(ActionMenuHandler.java:291)
         at oracle.mtg.migrationUI.ActionMenuHandler.run(ActionMenuHandler.java:85)
         at oracle.mtg.migration.WorkerThread.run(Worker.java:268)
    ** Workbench Repository : Oracle9i Enterprise Edition Release 9.2.0.1.0 - Production
    With the Partitioning, OLAP and Oracle Data Mining options
    JServer Release 9.2.0.1.0 - Production
    Repository Connection URL: jdbc:oracle:thin:@pcathlon17002:1521:ORCL
    ** The following plugins are installed:
    ** Microsoft Access 2.0/95/97/2000/2002/2003 Plugin, Production Release 10.1.0.4.0
    ** Active Plugin : MSAccess
    Thaks for help in advance
    Regards Steffen

  • Missing entries in primary key column

    I want to find out the missing entries in column which is primary key column. Please give me the query.
    Thanks

    I want to find out the missing entries in column which is primary key columnPlease eleborate this a little, If you talking about null values hosted by primray key column, tell me, how's it possible?
    hare krishna
    Alok

  • Missing Primary Key

    Hi,
    I have this situation where sometimes the primary key is missing or jumps sequence during record saving. It happens occasionally but I do not know when and how it happens.
    The primary key is generated automatically by sequence. For example, last month after the primary key 351 is being saved into table CUSTOMER, the next record is using primary key number 400.
    Earlier this week, the situation happened again. Primary key 904 was recorded into CUSTOMER table. But, the next primary key was 950. I do not know where are primary keys from 905 until 949 went missing.
    I hope anyone could show me how to rectify this.
    Thank you. :-)

    Sequences used Cached values. If a sequence is unused for some time, the cached values may get aged out of the shared pool, resulting in a seeming "loss" of intermediate values (the next call to the sequence will cache values above those just lost).
    Cached values are also lost at shutdown.
    Another situation is when a sequence is incremented but the transaction is not committed but is instead rolled back (either manually or because of some other failure). The incremented sequence value does not get rolled back.
    Sequences are designed to give Unique names. By default, they are not intended to guarantee consecutive numbers.
    Even if you define a sequence as a NOCACHE sequence, you can still lose the last incremented value on a transaction rollback.
    note: A Sequence as a Primary Key is an artificial PK (a "synthetic PK") but is sometimes necessary.
    Hemant K Chitale
    Edited by: Hemant K Chitale on Jul 6, 2012 4:16 PM
    Edited by: Hemant K Chitale on Jul 6, 2012 4:17 PM

  • Missing primary key column in created form?

    Please help. I am a newbie in apex.
    When i create form and view it later I am missing primary key column.
    HOw to make it show?
    Thanks in advance.

    Hi,
    While creating the form based on a table/view, what have you chosen to populate the primary key value? Existing Triggers or Existing Sequences or Custom PL/SQL function?
    Can you check for the Get PK pl/sql process in the page processing region of the related form page? If that function is missing then do the following steps to create the same,
    Step 1 : Create a new pl/sql process.
    Step 2 : Choose the Process Point as, On Submit After Computations and Validations.
    Step 3 : Write the following block,
    declare
      function get_pk return varchar2
      is
      begin
        for c1 in (select TEST_SEQ.nextval next_val
                   from dual) -- Create a new sequence for your requirement.
        loop
            return c1.next_val;
        end loop;
      end;
    begin
      :P3_TEST := get_pk;  -- Change the item name for your page.
    end;After doing all the above, try executing the page.
    Regards,
    Sakthi.

  • Order of fields in Primary key in where clause

    Hello,
    Does order of fields(complete primary key) in where condition matters with the performance or using of index ?
    Here is an example -
    BKPF has primary key - bukrs, gjahr, belnr.
    1. select single awkey into lv_awkey
      from bkpf where bukrs = p_bukrs
                  and gjahr = p_gjahr
                  and belnr = p_belnr.
    2. select single awkey into lv_awkey from bkpf
                                  where bukrs = p_bukrs and
                                            belnr = p_belnr and
                                            gjahr = p_gjahr.
    Does it make any difference in performance point of view with above two kinds ? Is that same applicable when accessing based on secondary index ?
    Thanks,
    Nagarjuna

    Hi Nagarjuna,
    the order of the fields does not influence the performance of the execution of the statements. This is true for primary key and secondary key accesses. In the statement cache (SAP and DB) two different statemens have to be maintained (parsing, space, ...) but their execution time is the same.
    Kind regards,
    Hermann

  • Primary Key missing in Table OBJS

    Hi,
    I have a problem in establishing relationship between Course Type and Course in Training and Event Management.
    Course Type is created in Active status and Course is Planned (ISTAT2).
    How can I create cours ein active status?
    How can I establish the relationship A020 between D and E object.
    How can I see the Participant list in PSV1 , I get an Error Primary Key misisng in Table OBJS.
    I am uploading the data with LSMW.
    Thanks
    PV

    Please go through documentation of report "RHSOBJCH". Also check following SAP notes:
    520488
    134311
    138411
    Regards

  • What is the diffrence between Row id and primary key ?

    dear all
    my question is about creating materialized views parameters (With Rowid and
    With Primary kry)
    my master table contains a primary key
    and i created my materialized view as follow:
    CREATE MATERIALIZED VIEW LV_BULLETIN_MV
    TABLESPACE USERS
    NOCACHE
    LOGGING
    NOCOMPRESS
    NOPARALLEL
    REFRESH FAST ON DEMAND
    WITH PRIMARY KEY
    AS
    SELECT
    BCODE ID, BTYPE BTYPE_ID,
    BDATE THE_DATE,SYMBOL_CODE STOCK_CODE,
    BHEAD DESC_E, BHEADARB DESC_A,
    BMSG TEXT_E, BMSGARB TEXT_A,
    BURL URL, BTIME THE_TIME
    FROM BULLETIN@egid_sefit;
    I need to know is there a diffrence between using (with row id) and (with primary key) on the performance of the query?

    Hi again,
    fast refreshing complex views based on rowids, according to the previous subject.
    (You're example shows that) are not possible.
    Complex remote (replication) snapshots cannot be based on Rowid too.
    for 10.1
    http://download-west.oracle.com/docs/cd/B14117_01/server.101/b10759/statements_6002.htm#sthref5054
    for 10.2
    http://download-uk.oracle.com/docs/cd/B19306_01/server.102/b14200/statements_6002.htm#sthref6873
    So I guess (didn't check it) that this applies ONLY to replication snapshots.
    This is not documented clearly though (documentation bug ?!)
    Documentation states that the following is generally not possible with Rowid MVIEWS:
    Distinct or aggregate functions
    GROUP BY or CONNECT BY clauses
    Subqueries
    Joins
    Set operations
    Rowid materialized views are not eligible for fast refresh after a master table reorganization until a complete refresh has been performed.
    The main purpose of my statements was to try to give a few tips how to avoid common problems with this complex subject, like for example: being able to CREATE an MVIEW with fast refresh clause does not really guarantee that it will refresh fast in the long run (reorganisation, partition changes) if ROWID based, further the rowid mviews have limitations according to the documentation (no group by, no connect by, link see above) plus fast refresh means only to use filter columnns of the mview logs, plus for aggregates you need additional count (*) pseudo columns.
    kind regards
    Karsten

  • Deploying BMP Entity Bean with primary key calss

    Hi,
    I am using EJB 2.0 with and websphere studio 5.0 and database is sql server 2000.
    My BMP Entity bean has a primary key class.From my client I am invoking the Entity Bean by calling it's findbyprimarykey method.
    The home interface of my findbyprimarykey method returns a class of type Remote.But in the Entity Bean class,the return type is the primarykey class type.
    My problem is invoking this findbyprimarykey from the client to get the remote interface so that the other business methods of the entity bean can be called.
    The control goes into the ejbFindbyPrimaryKey but when it is returing from the Entity Bean class,it gives a remote exception (as the return type in Entity Bean class and Home interface are different for the findbyprimarykey method).
    I think that somewhere in the deployment decriptor in my websphere,i have to specify the primarykey class type,which i am missing out and hence getting the error.
    Please help me out with your advice and solution.
    Thanks
    Rahul Priyadarshi

    Hi,
    Sorry to disturb you again.
    Even my code is also almost the same....i am pasting the code below...Please go through it and let me know if I have made any mistake..
    EditVendorEntityBean.....(Bean Class)
    package code.beans.EditVendor;
    import code.beans.dataAccess.*;
    import javax.ejb.CreateException;
    import javax.ejb.RemoveException;
    import javax.ejb.EntityBean;
    import javax.ejb.EntityContext;
    import javax.ejb.EJBException;
    import javax.ejb.FinderException;
    import javax.ejb.ObjectNotFoundException;
    import javax.naming.Context;
    import javax.naming.InitialContext;
    import javax.naming.NamingException;
    import java.sql.*;
    import javax.sql.*;
    import java.util.*;
    * Bean implementation class for Enterprise Bean: EditVendorEntity
    public class EditVendorEntityBean implements javax.ejb.EntityBean {
         private static Hashtable dataSources = new Hashtable();
         private String username;
    private int Vendor_ID;
    private int Category_Id;
    private String Category_Name;
    private String Vendor_Name;
    private String Vendor_Address1;
    private String Vendor_Address2;
    private String Contact_Name;
    private String Home_Phone;
    private String Work_Phone;
    private String email;
    private String faxno;
    private String userloginname;
    private boolean dirtyFlag = false;
    private EntityContext context;
    private static final String DS_NAME = "jdbc/spiPOPS";
    Connection con = null;
    Statement stmt = null;
    PreparedStatement st = null;
    ResultSet res = null;
         //***********************Business Methods*********************
    // Begin of Busines Methods
    public void setData (String[] catname, String vendorname,String vendadd1,String vendadd2,String vendcontact,String venoff,String venres,String mailid,String venfax) {
              System.out.println("in setData where Vendor Id= "+ Vendor_ID);
                   boolean status=false;
                   boolean existing=false;
                   ArrayList cat=new ArrayList();
                   try
                        cat=getcategorylist(this.Vendor_ID);
                   catch(SQLException e)
                        System.out.println("Could not get category list");
                   System.out.println("Size of cat array -->" + cat.size() + " and string array size -->" + catname.length);
                   if(catname.length>0)
                        //Removing unwanted vendor categories for a particular vendor id
                        for(int i=0;i<cat.size();i++)
                                  existing=false;
                                  String tempdata=(String)cat.get(i);
                                  for(int j=0;j<catname.length;j++)
                                       if(tempdata.equals(catname[j]))
                                            existing=true;
                                  if(!existing)
                                       try
                                            delvencat(this.Vendor_ID,tempdata.trim());
                                       catch(SQLException e)
                                            System.out.println("Could not delete record in POPS_VENDOR_CATEGORY for -->" + tempdata);
                   //Adding new vendor categories for a particular vendor
                        try
                                  for(int i=0;i<catname.length;i++)
                                       status=false;
                                       String strcat=catname;
                                       status=checkcat(this.Vendor_ID,strcat.trim());
                                       if(!status)
                                            insertvencat(this.Vendor_ID,strcat.trim());
                        catch(SQLException e)
                                  System.out.println("Could not insert or select from POPS_VENDOR_CATEGORY table");
                   this.Vendor_Name          =vendorname;
              this.Vendor_Address1     =vendadd1;
              this.Vendor_Address2     =vendadd2;
              this.Contact_Name          =vendcontact;
              this.Work_Phone               =venoff;
              this.Home_Phone               =venres;
              this.email                    =mailid;
              this.faxno                    =venfax;
                   dirtyFlag = true;
                   System.out.println("Leaving set data method");
    public Vector getData() {
         Vector vctRec=new Vector();
         ArrayList arrdatas = new ArrayList();
         arrdatas.add(""+this.Vendor_ID);
         arrdatas.add(this.Vendor_Name);
         arrdatas.add(this.Vendor_Address1);
         arrdatas.add(this.Vendor_Address2);
         arrdatas.add(this.Contact_Name);
         arrdatas.add(this.Work_Phone);
         arrdatas.add(this.Home_Phone);
         arrdatas.add(this.email);
         arrdatas.add(this.faxno);
         vctRec.addElement(arrdatas);
         ArrayList cat=new ArrayList();
              try
              System.out.println("Calling getcategorylist from getdata with vendorid-->" + this.Vendor_ID);
              cat          = getcategorylist(this.Vendor_ID);
         catch(SQLException e)
                   System.out.println("Could not get datas for category list");
         vctRec.addElement(cat);
         ArrayList allcats=new ArrayList();
         try
                        allcats          = getallcategorylist();
              catch(SQLException e)
                        System.out.println("Could not get datas for category list");
         vctRec.addElement(allcats);
              dirtyFlag = false;
         System.out.println("Before return statement in getdata with vector size -->" + vctRec.size());
              return vctRec;
    // End of Business Methods
    //**************************Entity Bean Methods*******************************
         * ejbActivate
         public void ejbActivate() {
              Vendor_ID = Integer.parseInt((String)context.getPrimaryKey());
         System.out.println("Inside ejbActivate Vendor_ID-->"+ Vendor_ID);
         * ejbLoad
         public void ejbLoad() {
              System.out.println("Inside ejbLoad ********" );
    try {
    loadRow();
    }catch (Exception ex) {
              System.out.println("Failed in loadRow()");
    throw new EJBException("ejbLoad: " +
    ex.getMessage());
         * ejbPassivate
         public void ejbPassivate() {
         System.out.println("Inside ejbPassivate " );
    Vendor_ID = 0;
         * ejbRemove
         public void ejbRemove() throws javax.ejb.RemoveException {
              //Empty Method
         * ejbStore
         public void ejbStore() {
    System.out.println("Inside ejbStore " );
    try {
    storeRow();
    }catch (Exception ex) {
              System.out.println("Exception thrown in storeRow" + ex.getMessage());
    throw new EJBException("ejbLoad: " +
    ex.getMessage());
         * getEntityContext
         public javax.ejb.EntityContext getEntityContext() {
              return context;
         * setEntityContext
         public void setEntityContext(javax.ejb.EntityContext ctx) {
              System.out.println("Inside setEntityContext " );
    try{
         con = getConnection(DS_NAME);
         System.out.println("DB Connection Created!!");
    catch(Exception e){
    this.context = ctx;
         * unsetEntityContext
         public void unsetEntityContext() {
    System.out.println("Inside unsetEntityContext " );
    closeDbConnection(con, res, st);
    this.context = null;
         * ejbCreate
         //code.beans.EditVendor.EditVendorEntityKey
         public code.beans.EditVendor.EditVendorEntityKey ejbCreate(String vendorid)
              throws javax.ejb.CreateException {          
              return new EditVendorEntityKey(vendorid);
              //return null;
         * ejbPostCreate
         public void ejbPostCreate(String vendorid) throws javax.ejb.CreateException {
              //Empty
         * ejbFindByPrimaryKey
         //code.beans.EditVendor.EditVendorEntityKey
         public code.beans.EditVendor.EditVendorEntityKey ejbFindByPrimaryKey(
              code.beans.EditVendor.EditVendorEntityKey primaryKey)
              throws javax.ejb.FinderException {
    try {
    if(selectByPrimaryKey(Integer.parseInt(primaryKey.getVendorId()))) {
              System.out.println("Leaving the findbyprimarykey method from the entity bean");
         return primaryKey;
         //return null;
    }else {
         throw new ObjectNotFoundException
         ("Row for id " + primaryKey + " not found.");
    }catch (Exception ex) {
    throw new EJBException("EXCEPTION IN ejbFindByPrimaryKey :- " + ex.getMessage());
         /*********************** Database Utility Routines *************************/
    private boolean selectByPrimaryKey(int priKey)
    throws SQLException {
         System.out.println("inside selectByPrimaryKey for primary key " + priKey);
    String queryStr ="SELECT VENDOR_ID FROM POPS_VENDOR WHERE VENDOR_ID = " + priKey;
    System.out.println("in selectByPrimaryKey where queryString is: "+ queryStr);
              stmt = con.createStatement();
    ResultSet result = stmt.executeQuery(queryStr);
    if(!result.next()) {
    stmt.close();
         System.out.println("Did not find "+priKey);
    return false;
    else { //Found the primaryKey
    Vendor_ID = result.getInt("VENDOR_ID");
    stmt.close();
    return true;
    private void loadRow() throws SQLException {
              System.out.println("inside loadRow ...");
              stmt = con.createStatement();
              String queryStr = "SELECT VENDOR_NAME,VENDOR_ADDRESS1,VENDOR_ADDRESS2,CONTACT_NAME,HOME_PHONE,WORK_PHONE,EMAIL_ID,FAX_NO " +
                                  "FROM POPS_VENDOR WHERE VENDOR_ID=" + Vendor_ID;
              System.out.println("Inside loadRow()***********"+queryStr);
              ResultSet result = stmt.executeQuery(queryStr);
              ArrayList catadatas=new ArrayList();
         if(!result.next())
         throw new SQLException("No record for primary key" + Vendor_ID);
              this.Vendor_ID               =Vendor_ID;
                        this.Vendor_Name          =result.getString("VENDOR_NAME");
                        this.Vendor_Address1     =result.getString("VENDOR_ADDRESS1");
                        this.Vendor_Address2     =result.getString("VENDOR_ADDRESS2");
                        this.Contact_Name          =result.getString("CONTACT_NAME");
                        this.Home_Phone               =result.getString("HOME_PHONE");
                        this.Work_Phone               =result.getString("WORK_PHONE");
                        this.email                    =result.getString("EMAIL_ID");
                        this.faxno                    =result.getString("FAX_NO");
                             System.out.println("Leaving loadrow method with loaded datas for vendor -->" + Vendor_ID);
                             stmt.close();
    private ArrayList getcategorylist(int vendor) throws SQLException{
              String queryStr ="SELECT DISTINCT(VENDOR_CAT) FROM POPS_VENDOR_CATEGORY WHERE VENDOR_ID=" + vendor;
              System.out.println("Query for the cat list --> " + queryStr);
              stmt = con.createStatement();
              ResultSet result = stmt.executeQuery(queryStr);
              ArrayList catdatas=new ArrayList();
    try{
                   while(result.next())
                        catdatas.add(result.getString("VENDOR_CAT"));
              catch (SQLException e){
                   stmt.close();
                   System.out.println("Could not retrieve datas for Category list");
              stmt.close();
              System.out.println("size off array for cat -->" + catdatas.size() + " and datas ->" + catdatas);
              return catdatas;
         private ArrayList getallcategorylist() throws SQLException{
                   //String queryStr ="SELECT DISTINCT(VENDOR_CAT) FROM POPS_VENDOR_CATEGORY";
                   StringBuffer strquery=new StringBuffer(20);
                   strquery.append("SELECT DISTINCT(CATEGORY_NAME) FROM POPS_CATEGORY");
                   stmt = con.createStatement();
                   //ResultSet result = stmt.executeQuery(queryStr);
                   ResultSet result = stmt.executeQuery(strquery.toString());
                   ArrayList catdatas=new ArrayList();
                   try{
                        while(result.next())
                                  //catdatas.add(result.getString("VENDOR_CAT"));
                                  catdatas.add(result.getString("CATEGORY_NAME"));
                   catch (SQLException e){
                             stmt.close();
                             System.out.println("Could not retrieve datas for All Category list");
                   stmt.close();
                   return catdatas;
         private void delvencat(int vendor,String vencat) throws SQLException {
              int update=-1;
              stmt = con.createStatement();
              String queryStr ="DELETE FROM POPS_VENDOR_CATEGORY WHERE VENDOR_ID = " + vendor + " AND VENDOR_CAT = '" + vencat.toUpperCase() + "'";
              System.out.println("Delete query --> " + queryStr);
              update= stmt.executeUpdate(queryStr);
              if(update!=1)
                   System.out.println("Did not find data to delete");
              stmt.close();
         private void insertvencat(int vendor,String vencat) throws SQLException {
              int update=-1;
              String queryStr ="INSERT INTO POPS_VENDOR_CATEGORY(VENDOR_ID,VENDOR_CAT)" +
                                  " VALUES(" + vendor +",'" + vencat + "')";
              System.out.println("Insert query --> " + queryStr);
              stmt = con.createStatement();
              update=stmt.executeUpdate(queryStr);
              if(update!=1)
                   System.out.println("Could not insert records in the database");
              stmt.close();
         private boolean checkcat(int vendor,String catven) throws SQLException {
              boolean datastatus=false;
              String queryStr ="SELECT VENDOR_ID FROM POPS_VENDOR_CATEGORY WHERE VENDOR_ID = " + vendor + " AND VENDOR_CAT = '" + catven.toUpperCase() + "'";
              stmt = con.createStatement();
              ResultSet result = stmt.executeQuery(queryStr);
              datastatus=result.next();
              stmt.close();
              return datastatus;
    private void storeRow() throws SQLException {
                   System.out.println("Inside ejb store");
         if (!dirtyFlag) {
         System.out.println("Skipping the UPDATE because object is not dirty");
         return;
         CallableStatement cs=null;
    try{
                        cs = con.prepareCall("EXEC POPS_VENDOR_UPDATE " + this.Vendor_ID + ",'" + this.Vendor_Name + "','" + this.Vendor_Address1 + "','" + this.Vendor_Address2 + "','" + this.Contact_Name + "','" + this.Work_Phone + "','" + this.Home_Phone + "','" + this.email + "','" + this.faxno +"'");
                        System.out.println("\n\n SQL Statement : \n " + "EXEC POPS_VENDOR_UPDATE " + this.Vendor_ID + ",'" + this.Vendor_Name + "','" + this.Vendor_Address1 + "','" + this.Vendor_Address2 + "','" + this.Contact_Name + "','" + this.Work_Phone + "','" + this.Home_Phone + "','" + this.email + "','" + this.faxno +"'");
                        cs.executeUpdate();
              catch (SQLException e){
                        cs.close();
                        System.out.     println("\n\n Error in calling stored procedure POPS_INSERT_NEW_REQUEST \n\n"+ e.getMessage() + "\n\n");
              cs.close();
              dirtyFlag = false;
         private Connection getConnection(String dbName) throws SQLException
              String configuredDataSourceName = null;
              if (dbName == null) {
                   System.out.println("Attemp to get connection failed. The requested database name is null");
              DataSource dbSource = getDataSource(dbName);
              return dbSource.getConnection();
         private DataSource getDataSource(String dbName)
              // looking from cache;
              DataSource dbSource = (DataSource) dataSources.get(dbName);
              if (dbSource == null) { //we need to find it from JNDI
                   try {
                        Context ic = new InitialContext();
                        dbSource = (DataSource) ic.lookup(dbName);
                        dataSources.put(dbName, dbSource);
                   }catch (NamingException e){
              return dbSource;
         * User calls this function to safely close an connection
         * @param connt The connection a datasource
         * @param rs The resulSet inside this connection
         * @param statement The statement associate with this connection
         private void closeDbConnection(Connection cont,ResultSet rs,Statement statement)
              if (rs != null)
              try {
                        rs.close();
                   } catch (SQLException ignored) {
                        ignored.printStackTrace();
              if (statement != null)
                   try {
                        statement.close();
                   } catch (SQLException ignored) {
                        ignored.printStackTrace();
              if (cont != null)
                   try {
                        cont.close();
                   } catch (SQLException ignored) {
                        ignored.printStackTrace();
         } //closeDbConnection
    EditVendorEntity (Remote Interface)
    package code.beans.EditVendor;
    import javax.ejb.EJBObject;
    import java.rmi.RemoteException;
    import java.util.*;
    * Remote interface for Enterprise Bean: EditVendorEntity
    public interface EditVendorEntity extends javax.ejb.EJBObject {
         public void setData (String[] catname, String vendorname,String vendadd1,String vendadd2,String vendcontact,String venoff,String venres,String mailid,String venfax)
                   throws RemoteException;
    public Vector getData() throws RemoteException;
    EditVendorEntityHome (Home Interface)
    package code.beans.EditVendor;
    import java.rmi.RemoteException;
    import javax.ejb.CreateException;
    import javax.ejb.FinderException;
    import javax.ejb.DuplicateKeyException;
    import javax.ejb.EJBHome;
    import java.util.*;
    * Home interface for Enterprise Bean: EditVendorEntity
    public interface EditVendorEntityHome extends javax.ejb.EJBHome {
         * Creates an instance from a key for Entity Bean: EditVendorEntity
         public code.beans.EditVendor.EditVendorEntity create(String vendorid)
              throws javax.ejb.CreateException, java.rmi.RemoteException;
         * Finds an instance using a key for Entity Bean: EditVendorEntity
         public code.beans.EditVendor.EditVendorEntity findByPrimaryKey(
              code.beans.EditVendor.EditVendorEntityKey Vendor_ID)
              throws javax.ejb.FinderException, java.rmi.RemoteException;
    EditVendorEntityKey (Primary Key Class)
    package code.beans.EditVendor;
    * Key class for Entity Bean: EditVendorEntity
    public class EditVendorEntityKey implements java.io.Serializable {
         static final long serialVersionUID = 3206093459760846163L;
         public String primkey;
         * Creates an empty key for Entity Bean: EditVendorEntity
         public EditVendorEntityKey() {  }
         public EditVendorEntityKey(String primarykey) {     
              this.primkey=primarykey;
         public String getVendorId() {
    return primkey;
         * Returns true if both keys are equal.
         public boolean equals(java.lang.Object otherKey) {
              if (otherKey instanceof code.beans.EditVendor.EditVendorEntityKey) {
                   code.beans.EditVendor.EditVendorEntityKey o =
                        (code.beans.EditVendor.EditVendorEntityKey) otherKey;
                   return (primkey.equals(otherKey));
              return false;
         * Returns the hash code for the key.
         public int hashCode() {
              return (primkey.hashCode());
    Please go through and give me your comments and solution...
    Thanks in advance
    Rahul

  • Difference between primary key and primary index

    Dear All,
             Hi... .Could you pls tell me the difference between primary key and primary index.
    Thanks...

    Hi,
    Primary Key : It is one which makes an entry of the field unique.No two distinct rows in a table can have the same value (or combination of values) in those columns.
    Eg: first entry is 111, if you again enter value 111 , it doesnot allow 111 again. similarly for the strings or characters or numc etc. Remember that for char or numc or string 'NAME' is not equal to 'name'.
    Primary Index: this is related to the performance .A database index is a data structure that improves the speed of operations in a table. Indices can be created using one or more columns, providing the basis for both rapid random lookups and efficient ordering of access to records. The disk space required to store the index is typically less than the storage of the table (since indices usually contain only the key-fields according to which the table is to be arranged, and excludes all the other details in the table), yielding the possibility to store indices into memory from tables that would not fit into it. In a relational database an index is a copy of part of a table. Some databases extend the power of indexing by allowing indices to be created on functions or expressions. For example, an index could be created on upper(last_name), which would only store the uppercase versions of the last_name field in the index.
    In a database , we may have a large number of records. At the time of retrieving data from the database based on a condition , it is a burden to the db server. so whenever we create a primary key , a primary index is automatically created by the system.
    If you want to maintain indices on other fields which are frequently used in where condition then you can create secondary indices.
    Reward points if helpful.
    Thanks,
    Sirisha..

Maybe you are looking for