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.
BrianIf 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 -
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 nullwith 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:
user468547Here 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.
ThanksI 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 -
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,
NagarjunaHi 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
PVPlease 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 PriyadarshiHi,
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
-
Issue with passing expression to a hashmap key in a dataTable column
hi all, Can someone help me with passing an expression like "123-456" to a hashmap key in my dataTable . In my dataTable i have t:columns tag which generates checkboxes for each row in the dynamic column .The value of checkbox must be identified by a
-
Concatenate out put of 2 or more columns in BEX Report in to one column
Hi, I am working on service order report in BEX, and i would like to Concatenate out put of 2 or more columns in BEX Report in to one column. Please share me if any scenarios. Thank Neni
-
I NEED MY VERIFICATION EMAIL SO I CAN DOWNLOAD APPS I'VE BEEN WAITING FOR EMAIL SINCE LAST DAY..PLEASE FIX THIS HELP ME..THANK YOU
-
When I close the firefox browser but I do not quit the program entirely, the app tabs remain as I had originally set them up. But when I fully quit firefox. All the app tabs I set up are gone and I have to set them up all over again every time.
-
IPhone review second day after purchase
Hey all, I have purchased 3G iPhone yesterday and here to write a little review. I am completely dissatisfied as a "new" customer, both with the device and AT&T service. First of all, it seems that 3G network is so slow everywhere around Manhattan, i