คำถามติดแท็ก oracle

ฐานข้อมูล Oracle ทุกเวอร์ชัน เพิ่มแท็กเฉพาะรุ่นเช่น oracle-11g-r2 หากบริบทนั้นสำคัญสำหรับคำถาม ห้ามใช้สำหรับผลิตภัณฑ์ Oracle เช่นแอปพลิเคชันหรือมิดเดิลแวร์หรือผลิตภัณฑ์ฐานข้อมูลอื่น ๆ ที่ Oracle เป็นเจ้าของเช่น MySQL หรือ BerkeleyDB

5
มันเป็นความคิดที่ดีหรือไม่ที่จะสร้าง foreign key บนตารางใน schema ที่แตกต่างกันในฐานข้อมูลเดียวกันสำหรับแอปพลิเคชันขนาดใหญ่?
ฉันกำลังทำงานกับการถ่ายโอนแอปพลิเคชันบนเว็บขนาดใหญ่ / sql ไปยังเซิร์ฟเวอร์เฉพาะ แอปพลิเคชันนี้อยู่ในสคีมาเดียวกับ 70 แพ็คเกจของโค้ดโปรแกรม แอปพลิเคชั่นนี้สร้างขึ้นประมาณ 15 คนในเวลาที่ต่างกัน และมันก็เป็นเรื่องปกติที่เราจะต้องสร้างกุญแจต่างประเทศในตารางอ้างอิงในแบบแผนต่าง ๆ เพราะมันมีความมั่นใจและรักษาฐานข้อมูลได้ดีมากเพราะเราไม่จำเป็นต้องเก็บตารางการอ้างอิงเดียวกันไว้ในแบบแผนต่าง ๆ แต่อย่างไรก็ตาม DBA ของฉัน (ผู้ที่สร้างอินสแตนซ์ใหม่ด้วย DB และคัดลอกแอปพลิเคชันของฉันภายในโซนโซลาริส) กล่าวว่ารุนแรงมากในวันนี้ "กุญแจต่างประเทศใน schemas ที่แตกต่างกันนั้นชั่วร้ายและคุณต้องทำลายมัน!" เขาไม่ได้อธิบายมุมมองของเขา เป็นความคิดที่ดีหรือไม่ที่ทำเช่นนั้นกับแอพพลิเคชั่นขนาดใหญ่?

5
ใน Oracle ฉันจะบันทึกซีเควนซ์ต่อไปได้อย่างไรในตัวแปรที่จะใช้ซ้ำในส่วนแทรกหลาย ๆ
ฉันกำลังเขียนสคริปต์เพื่อเติมตารางด้วยข้อมูลสำหรับการทดสอบ ฉันต้องการเขียนสิ่งต่อไปนี้ แต่ฉันไม่รู้วิธีการ (ฉัน Oracle 11g) SET ENABLED_USER_ID = SEQ.NEXTVAL; // PSEUDOCODE SET DISABLED_USER_ID = SEQ.NEXTVAL; // PSEUDOCODE INSERT INTO USERS (ID, USR_NAME) VALUES (:ENABLED_USER_ID, 'ANDREW'); INSERT INTO CAR (CAR_ID, CAR_NAME, USR_ID) VALUES (CARSEQ.NEXTVAL, 'FORD', :ENABLED_USER_ID); INSERT INTO USERS (ID, USR_NAME) VALUES (:DISABLED_USER_ID, 'ANDREW'); INSERT INTO CAR (CAR_ID, CAR_NAME, USR_ID) …

3
ความคิดเห็น Rem และ - สำหรับ SQL * Plus แตกต่างกันหรือไม่?
บนพรอมต์ SQL * Plus ทั้งคู่Remและ--มีคุณสมบัติเป็นตัวบ่งชี้ความคิดเห็น: Rem this is a comment -- this is also a comment create table emp ( id number primary key, name cvarchar2(40)); มีความแตกต่างระหว่างเทคนิคการแสดงความคิดเห็นทั้งสองหรือไม่?

5
อัปเดตแถวทั้งหมด
ฉันต้องการทราบวิธีที่มีประสิทธิภาพที่สุดในการอัปเดตทุกแถวในตาราง Oracle ที่มีขนาดใหญ่มากสำหรับคอลัมน์เดียว ตัวอย่างเช่น: update mytable set mycolumn=null; หรือ: update mytable set mycolumn=42; ความรู้ของฉันอาจจะเหม็นอับ สิ่งที่ฉันทำคือการปรับเปลี่ยนตารางเพื่อวางคอลัมน์ จากนั้นฉันเปลี่ยนตารางเพื่อเพิ่มคอลัมน์ด้วยค่าเริ่มต้นของค่าใหม่ที่ฉันต้องการใช้ จากนั้นฉันจะแก้ไขตารางเพื่อลบค่าเริ่มต้นสำหรับคอลัมน์ ฉันพบว่าสิ่งนี้เร็วกว่าแค่เรียกใช้การอัปเดต แต่ฉันรู้สึกว่ามีวิธีที่ดีกว่า
12 oracle  update 


3
มีวิธีใดบ้างที่จะแยกสตริงออกและฉีด SQL โดยไม่ต้องใช้เครื่องหมายคำพูดเดี่ยวใน oracle?
ฉันกำลังทดสอบแอปพลิเคชันที่ใช้ Oracle และพบรหัสต่อไปนี้ Query = "เลือกชื่อจากพนักงาน WHERE id = '" + PKID + "'; เช่นสตริงการสืบค้นมีเครื่องหมายคำพูดล้อมรอบค่า PKID ซึ่งได้มาจาก URL โดยตรง เห็นได้ชัดว่านี่คือการฉีด SQL แบบคลาสสิกที่รอให้เกิดขึ้น ... ยกเว้นแอปพลิเคชันอยู่เบื้องหลัง CA SiteMinder ซึ่งบล็อก URL ใด ๆ ด้วยการเสนอราคาเดียว (ในรูปแบบใด ๆ ) จากการถูกส่งผ่านไปยังแอปพลิเคชัน มีวิธีใดบ้างที่จะแยกออกจากสตริงและฉีด SQL โดยไม่ต้องใช้เครื่องหมายคำพูดเดี่ยว? แก้ไข: ขออภัยฉันควรชัดเจนกว่า - ฉันเข้าใจว่าควรเขียนอย่างไร แต่ฉันต้องโน้มน้าวผู้คนว่าเป็นปัญหาที่เอาเปรียบ ในขณะนี้เพราะมันอยู่เบื้องหลัง siteminder ซึ่งบล็อกราคาเดียวดังนั้นมันจะเป็นการแก้ไขที่มีลำดับความสำคัญต่ำ

1
Commit vs Fast Commit vs Commit Cleanout ในฐานข้อมูล Oracle
ฉันสงสัยว่ามีบางคนสามารถตรวจสอบความเข้าใจของฉันเกี่ยวกับความแตกต่างระหว่าง 3 คำเหล่านั้นเกี่ยวกับฐานข้อมูล Oracle หรือไม่ แหล่งข้อมูลหลายแห่งทำให้คำเหล่านี้สับสนและไม่อธิบายรายละเอียดดังนั้นจึงเป็นเรื่องยากที่จะค้นหาข้อมูล จากสิ่งที่ฉันรวบรวม: ความมุ่งมั่นและความมุ่งมั่นอย่างรวดเร็วเป็นสิ่งเดียวกันแน่นอนการกระทำทั้งหมดนั้นเป็นการกระทำที่รวดเร็ว การยอมรับอย่างรวดเร็วเป็นหลักเท่านั้นที่ปรับปรุงการตั้งค่าสถานะในตารางธุรกรรมของส่วนหัวของการเลิกทำ / ย้อนกลับเพื่อระบุว่าการทำธุรกรรมได้กระทำ อย่างไรก็ตามบล็อกที่เกิดขึ้นจริงจะไม่ได้รับการตรวจสอบอีกต่อไปซึ่งหมายความว่าที่อยู่การยกเลิกไบต์ (UBA) ในรายการธุรกรรมที่สนใจ (ITL) ซึ่งอยู่ในส่วนหัวของบล็อกข้อมูลยังคงชี้ไปที่ตารางธุรกรรมของกลุ่มการเลิกทำที่สอดคล้องกัน นอกจากนี้ไบต์ล็อคของแถวที่เกี่ยวข้องจะไม่ถูกปล่อยออกมาและจำนวนการล็อคใน ITL จะไม่เปลี่ยนแปลง (แถวยังคงล็อคอยู่) ในการคอมมิทการล้างข้อมูลบล็อกจะถูกตรวจทานอีกครั้งและ ITL ได้รับการอัพเดตด้วย commit SCN อย่างไรก็ตามจำนวนการล็อคใน ITL และล็อคไบต์ที่เก็บไว้ในแต่ละแถวยังคงไม่ได้รับการปรับปรุง (แถวยังคงล็อคเหมือนการกระทำที่รวดเร็ว) สิ่งนี้จะไม่สร้างการทำซ้ำแม้ว่าบล็อกจะเปลี่ยนไป บล็อกที่มีความมุ่งมั่นตามปกติ (== มุ่งมั่นอย่างรวดเร็ว) จะได้รับการล้างข้อมูลบล็อกล่าช้าเมื่อพวกเขาถูกแตะครั้งต่อไป (และสร้างการทำซ้ำ) บล็อกที่มีการกระทำการล้างข้อมูลจะได้รับการล้างข้อมูลบล็อกล่าช้าเมื่อมีการแตะครั้งถัดไป (และสร้างการทำซ้ำ) หวังว่าใครบางคนสามารถตรวจสอบคะแนนเหล่านี้! ขอบคุณ!

4
เหตุผลที่ไม่ใช้หมายเลขที่ไม่มีค่าใน Oracle?
บริษัท ของเรากำลังติดต่อกับ บริษัท ซอฟต์แวร์อื่นสำหรับโครงการร่วมกันและเราได้รับแจ้งว่าหากไม่ควรแสดงค่าเฉพาะเราควรผ่านใน -5000 (ค่า Sentinel ตามอำเภอใจ) เหตุผลก็คือไม่มีคอลัมน์ตัวเลขในฐานข้อมูล Oracle ของพวกเขารองรับค่า Null ตามคำแนะนำของ Oracle Dev (ปัจจุบัน) ของพวกเขา บริษัท นี้ยังเขียนโค้ดส่วนใหญ่ของพวกเขาใน VB6 (ค่อยๆเปลี่ยนเป็น VB.NET ซึ่งเป็นอีกหัวข้อหนึ่งสำหรับอีกวันหนึ่ง ... ) จากความอยากรู้อย่างแท้จริงมีเหตุผลใดที่ถูกต้องสำหรับคำแนะนำนี้หรือไม่? ฉันไม่สามารถคิดถึงสิ่งใดในด้านของฉัน --- แก้ไข ขอบคุณสำหรับความคิดเห็นทั้งหมด ฉันโพสต์คำถามเดียวกันบน CodeProject.com ( ลิงก์ ) และได้รับคำติชมที่คล้ายกันมาก ดูเหมือนว่าจะมีเพียงครั้งเดียวที่เราจะสามารถพิสูจน์ได้ว่าการปฏิบัตินี้เกี่ยวข้องกับกุญแจต่างประเทศและฉันสามารถระบุได้ว่าไม่มีกุญแจต่างประเทศใด ๆ ในระบบ นักพัฒนาที่ทำตามข้อตกลงนี้ (ฉันเคยทำงานที่ บริษัท นั้น) มีประสบการณ์มากกว่าฉันอย่างมากดังนั้นฉันจึงต้องการตรวจสอบให้แน่ใจว่าไม่มีเหตุผลที่ถูกต้องสำหรับเรื่องนี้ก่อนที่จะทำการตรวจสอบ

1
ปิดใช้งานคอมมิชชันที่ชัดเจนใน JDBC ตรวจจับใน SQL หรือทำให้ฐานข้อมูลอยู่ในสถานะอ่านอย่างเดียว
พื้นหลัง : ฉันกำลังทำงานในhttp://sqlfiddle.com (เว็บไซต์ของฉัน) และกำลังพยายามป้องกันไม่ให้มีการละเมิดวิธีใดวิธีหนึ่ง ฉันหวังว่าด้วยการถามเกี่ยวกับปัญหาที่ฉันกำลังพูดถึงอยู่ในปัจจุบันฉันไม่ได้ตั้งใจทำให้การละเมิดที่อาจเกิดขึ้นแย่ลงโดยไม่ได้ตั้งใจ แต่คุณจะทำอย่างไร ฉันเชื่อใจพวกคุณ ฉันต้องการป้องกันไม่ให้ผู้ใช้ออกการเรียก 'ส่งสัญญาณ' อย่างชัดเจนภายในบล็อคธุรกรรม จากบริบทของ SQL Fiddle บล็อกธุรกรรมคือรหัสที่เรียกใช้งานบนแผงด้านขวา โดยทั่วไปฉันจะวนซ้ำและดำเนินการรายการคำสั่ง plaintext SQL และฉันต้องการให้แน่ใจว่าการเปลี่ยนแปลงทั้งหมดที่ทำจะถูกย้อนกลับในตอนท้ายของแบทช์ โดยปกติการเปลี่ยนแปลงของพวกเขาจะได้รับการย้อนกลับ แต่บางครั้งก็มีคำสั่ง 'กระทำ' ที่ชัดเจนภายในข้อความและแน่นอนว่าการย้อนกลับของฉันจะไม่ทำงาน ความมุ่งมั่นที่ชัดเจนนี้มีแนวโน้มมากจากผู้ใช้ที่พยายามจะทำลาย schema บน SQL Fiddle ดังนั้นคนอื่น ๆ ที่ทำงานกับมันจะเห็นข้อผิดพลาด ผลลัพธ์หลักที่ต้องการ : ฉันต้องการปิดใช้งานการกระทำที่ชัดเจนในระดับ JDBC ถ้าเป็นไปได้ นี่เป็นเพราะฉันต้องสนับสนุนผู้ขายแบ็กเอนด์ฐานข้อมูลหลายคนและแน่นอนว่าแต่ละคนมีนิสัยใจคอในระดับต่ำ ตัวเลือกสำรอง : หากไม่สามารถกำหนดค่า JDBC เพื่อปิดใช้งานการกระทำที่ชัดเจนได้ฉันจะเปิดให้มีการตรวจหาการกระทำที่ชัดเจนในขณะประมวลผลชุดข้อมูลสำหรับแบ็กเอนด์ต่อไปนี้: SQL Server, Oracle, MySQL และ PostgreSQL สำหรับ SQL …

2
ใช้กรณีเดียวกันเมื่อเงื่อนไขสำหรับคอลัมน์แบบสอบถามจำนวนมาก
มีวิธี "ดีกว่า" ในการเขียนSELECTประโยคใหม่ที่มีคอลัมน์จำนวนมากใช้CASE WHENเงื่อนไขเดียวกันเพื่อให้มีการตรวจสอบเงื่อนไขเพียงครั้งเดียวหรือไม่ ดูตัวอย่างด้านล่าง SELECT CASE testStatus WHEN 'A' THEN 'Authorized' WHEN 'C' THEN 'Completed' WHEN 'P' THEN 'In Progress' WHEN 'X' THEN 'Cancelled' END AS Status, CASE testStatus WHEN 'A' THEN authTime WHEN 'C' THEN cmplTime WHEN 'P' THEN strtTime WHEN 'X' THEN cancTime END AS lastEventTime, CASE …

3
Oracle รู้ได้อย่างไรว่าฉันเป็นใคร
ไม่สำคัญเล็กน้อย แต่มันทำให้ฉันอยากรู้อยากเห็น ฉันเพิ่งเข้าสู่ระบบฐานข้อมูล Oracle 10g เป็นครั้งแรกโดยใช้ Oracle SQL Developer Tools ฉันใช้การเข้าสู่ระบบของผู้ใช้ทั่วไปที่ไม่ใช่ชื่อของฉัน (nottstest2) จากเครื่องที่เรียกสิ่งที่ไม่ใช่ชื่อของฉัน (courgette) ชื่อของฉันไม่มีที่ใดในฐานข้อมูลและไม่เชื่อมโยงกับการเข้าสู่ระบบ แต่บันทึกของเซิร์ฟเวอร์แสดงการเชื่อมต่อจาก "Jon Hopkins" รู้ได้อย่างไรว่าฉันเป็นใคร มันถูกดึงจากการเข้าสู่ระบบ Windows ของฉันในบางวิธี (แม้ว่าฉันไม่ได้ใช้การลงชื่อเข้าใช้ครั้งเดียว)

3
แนวคิดของตารางที่สงวนไว้คืออะไร
ฉันอ่านในเอกสารของ Oracle เกี่ยวกับตารางที่สงวนคีย์ในการอัปเดตส่วนเข้าชม อย่างไรก็ตามฉันไม่พบวิธีง่าย ๆ ที่จะเข้าใจ ฉันหวังว่าจะได้รับรายละเอียดเกี่ยวกับแนวคิดอย่างง่ายนอกเหนือจากเอกสาร Oracle อย่างเป็นทางการ
12 oracle 

2
อะไรคือสาเหตุและวิธีแก้ไขการกลายพันธุ์ข้อผิดพลาดของตาราง?
ฉันเข้าใจว่าการกลายพันธุ์ข้อผิดพลาดของตารางเกิดจากข้อบกพร่องในการออกแบบหรือแบบสอบถามที่มีปัญหา แบบสอบถามเก่าถูกนำไปผลิตเมื่อเร็ว ๆ นี้ซึ่งทำให้เกิดข้อผิดพลาดของการกลายพันธุ์ของตาราง DBA ของเราแก้ไขปัญหาได้ แต่เราไม่รู้วิธีการ อะไรทำให้เกิดข้อผิดพลาดในการกลายพันธุ์ของตารางและ DBA ของเราจะแก้ไขปัญหาอย่างไร
12 oracle  trigger  plsql 

2
การอัพเดต 700 ล้านแถวเป็นค่าเดียวกัน
ฉันมีคลังข้อมูล (oracle) ที่ฉันต้องตั้งค่าคอลัมน์เป็นค่าเดียวกันสำหรับทั้ง 700 ล้านแถว ฉันไม่มีสิทธิ์การเข้าถึงระดับผู้ดูแลระบบหรือการเข้าถึงผู้ดูแลระบบดังนั้นจึงจำเป็นต้องทำให้สำเร็จด้วย sql พื้นฐานและไม่มีตาราง temp ที่สร้างขึ้น สิ่งที่ซับซ้อนกว่านั้นคือถ้าฉันพยายามทำการอัพเดทง่ายๆโดยที่ 1 = 1 มันจะหมดพื้นที่ทำซ้ำ วิธีที่ฉันให้มันทำงานตอนนี้วนซ้ำเช่นนี้: loop update mytable set mycolumn = '1' where mycolumn is null and rownum < 50000; commit; end loop แต่ฉันรู้ว่านี่อาจไร้เดียงสาและต้องมีวิธีแก้ปัญหาที่รวดเร็วและสง่างามกว่า

2
เหตุผล LNNVL
LNNVL เป็น oracle ที่มีอยู่แล้วภายในฟังก์ชันที่ส่งคืน TRUE สำหรับเงื่อนไขที่ประเมินเป็น FALSE หรือ UNKNOWN และส่งคืน FALSE สำหรับเงื่อนไขที่ประเมินเป็น TRUE คำถามของฉันคือสิ่งที่จะได้ประโยชน์จากการคืนตรงกันข้ามกับเงื่อนไขความจริงมากกว่าเพียงแค่จัดการค่า NULL? ตัวอย่างเช่นสมมติว่าคุณมีตาราง Emp พร้อมคอลัมน์ StartCommission และ CurrentCommission ซึ่งอาจมีค่า Null ผลตอบแทนต่อไปนี้เป็นเพียงแถวที่ไม่มีค่าเป็น null: SELECT * FROM Emp WHERE StartCommission = CurrentCommission; หากคุณต้องการรวมแถวที่ค่าคอมมิชชันเป็นโมฆะคุณสามารถทำสิ่งนี้: SELECT * FROM Emp WHERE StartCommission = CurrentCommission OR StartCommission IS NULL OR CurrentCommission IS NULL; …

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.