table recreation (אורקל)

table recreation (אורקל)

אני מייצר טבלא מסוימת מחדש כך:
drop table tbl1 create table tbl1 as select * from view1 alter table tbl1 add constraint tbl1_pk primary key (counteridx, fdate)​
במרבית המערכות זה עובד תקין, אבל אצל אחד הלקוחות יש לי הודעת שגיאה: הקוד| [Microsoft][ODBC driver for Oracle][Oracle]ORA-02437: cannot validate (user.tbl1_PK) - primary key violated אני מבין מזה שעלי למחוק את הprimary key בנפרד ממחיקת הטבלא. האם אני צודק? ואם כן - אז כיצד?
 
עדכון: כאשר אני מנסה drop למפתח הראשי

לפני הסרת הטבלה, אז מתקבלת שגיאה
[Microsoft][ODBC driver for Oracle][Oracle]ORA-02443: Cannot drop constraint - nonexistent constraint​
כאילו שהמפתח קיים בטבלא אחרת (אין לי יצירה של המפתח הזה עבור טבלאות בשמות אחרים). רעיונות?
 
עדכון - פתור + שאלה נוספת ...

הבעיה היתה באחד היישומים (שרצים במקום אחר) שגרם ליצירת רשומה כפולה (אותם counteridx, fdate). מחיקה ידנית של הרשומה המיותרת פתרה את הבעיה. האם יש דרך בעזרת משפט SQL פשוט לצמצם רשומות כפולות? (אם קיימות 2 רשומות זהות, פקודה בסגנון של
drop from tbl where CounterIdx=1 and fDate=39291​
תמקוח את שתי הרשומות. (הפתרון הידני שלי בשלב זה היה למחוק את שתי הרשומות, ולתת ליישום החיצוני למלא עותק אחד חזרה).
 

s h i m s h o n

New member
תשובה

בבקשה:
delete tbl where rowid in (select rowi from (select rowid rowi, row_number() over (partition by ID order by rowid) rown from tbl) where rown > 1)​
בברכה, ש.
 
למעלה