Các cơ sở dữ liệu sẽ nhận ra tên Oracle là một cường quốc trong thế giới hệ thống quản lý cơ sở dữ liệu quan hệ (DBMS). Oracle đã sản xuất các giải pháp DBMS mạnh mẽ trong nhiều thập kỷ và vẫn là công ty hàng đầu trong lĩnh vực này. Nhiều người dùng cuối của các sản phẩm cơ sở dữ liệu có thể bị nhầm lẫn hoặc gặp khó khăn khi họ đang sử dụng một giải pháp được thiết kế trước và nó tạo ra một thông báo lỗi. Một thông báo lỗi phổ biến do Oracle tạo ra là lỗi ORA-06512.
Cũng xem bài viết của chúng tôi Cách khắc phục lỗi ora-00942
Oracle là một hệ thống quản lý cơ sở dữ liệu đã tồn tại được bốn mươi năm dưới nhiều hình thức khác nhau. Ban đầu nó sử dụng một thứ gọi là lược đồ SCOTT, được đặt theo tên của một trong những nhân viên ban đầu của Oracle. Bạn thậm chí đã đăng nhập vào Oracle lần đầu tiên với tên người dùng 'scott' và mật khẩu 'tiger' được đặt theo tên con mèo của Scott. Bây giờ có một số lược đồ được sử dụng tùy thuộc vào những gì bạn sử dụng Oracle cho.
Nếu bạn muốn tìm hiểu thêm về Oracle từ đầu, trang này rất hữu ích.
Sửa lỗi ORA-06512
Trong Oracle, lỗi ORA-06512 là lỗi ngoại lệ chung cho bạn biết có lỗi gì xảy ra. Đây là một trong những lỗi ít cụ thể nhất do Oracle tạo ra, vì nó chỉ cho bạn biết rằng có vấn đề, nhưng không phải là lỗi.
Ví dụ: một thông báo lỗi điển hình có thể đọc:
Số ORA-01422: tìm nạp chính xác trả về nhiều hơn số lượng hàng được yêu cầu
ORA-06512: tại ngay DATABASE_NAME, dòng 66
ORA-06512: tại dòng 1
Dòng đầu tiên cho bạn biết loại lỗi nào đang xảy ra, trong trường hợp này, truy vấn sẽ trả về nhiều dữ liệu hơn truy vấn mong đợi vì vậy nó không biết cách xử lý. Mã 'ORA-01422' là mã lỗi thực tế bạn cần xem xét. ORA-06512 chỉ là mã lỗi chung.
Dòng thứ hai cho bạn biết lỗi xảy ra ở đâu. DATABASE_NAME sẽ là bất kỳ cơ sở dữ liệu nào bạn đang làm việc tại thời điểm đó. Dòng 66 là dòng xảy ra lỗi và là dòng bạn cần kiểm tra để sửa lỗi.
Dòng thứ ba trong cú pháp lỗi cho bạn biết cuộc gọi đến từ đâu. Kiểm tra dòng một và bạn sẽ thấy một cuộc gọi đến DATABASE_NAME.
Để khắc phục lỗi cụ thể này, bạn cần khắc phục sự cố do ORA-01422 gây ra, đó là 'tìm nạp chính xác trả về nhiều hơn số hàng được yêu cầu' hoặc bạn cần thêm một trình xử lý ngoại lệ để yêu cầu Oracle bỏ qua. Vì việc khắc phục vấn đề cốt lõi luôn được ưu tiên hơn, đây là cách để đi.
Có hai điều bạn có thể làm. Nếu bạn mong muốn truy vấn trả về nhiều hơn một hàng, bạn có thể sửa đổi nó để nó không bị bất ngờ. Nếu bạn chỉ mong truy vấn trả về một hàng đơn, bạn cũng có thể sửa đổi nó cho câu hỏi đó.
Mong đợi nhiều hơn một hàng:
cho X vào (chọn * từ t trong đó)
vòng
- xử lý bản ghi X tại đây
kết thúc vòng lặp;
Điều này sẽ xóa lỗi trong các truy vấn cơ sở dữ liệu trong đó nhiều hơn một hàng sẽ được trả về.
Nếu bạn chỉ mong đợi một hàng duy nhất được trả về, bạn có thể thử:
bắt đầu
chọn * vào thành phố.
từ t nơi mà lòng.
quá trình….
ngoại lệ
khi NO_DATA_FOUND thì
mã xử lý lỗi khi không tìm thấy bản ghi
khi QUÁ
mã xử lý lỗi khi tìm thấy quá nhiều hồ sơ
kết thúc;
Phương thức thứ hai này sẽ chỉ cung cấp một hàng duy nhất mà không đưa ra 'ORA-01422: tìm nạp chính xác trả về nhiều hơn số lượng hàng được yêu cầu' và do đó lỗi ORA-06512 ban đầu.
Bạn cũng có thể điều chỉnh truy vấn để nó chỉ trả về hàng đầu tiên của câu trả lời nhiều hàng. Điều này có thể hoạt động nếu bạn không có toàn quyền kiểm soát cơ sở dữ liệu hoặc không muốn gây rối với mọi thứ quá nhiều nhưng vẫn cần một câu trả lời.
khai báo
Con trỏ c1 để chọn * từ t trong đó
bắt đầu
mở c1;
lấy c1 vào ..
nếu (c1% không thành công) thì
xử lý lỗi không tìm thấy hồ sơ
kết thúc nếu;
đóng c1;
kết thúc;
(Nếu bạn biết SQL, bạn có thể hơi bối rối bởi các dòng lệnh này, Oracle Oracle không sử dụng Transact-SQL mà là phần mở rộng ngôn ngữ thủ tục của SQL, PL / SQL. Mặc dù tương tự như Transact-SQL, PL / SQL không có rất nhiều điều thông minh và là một công cụ rất mạnh theo đúng nghĩa của nó. Bạn có thể thấy Câu hỏi thường gặp về PL / SQL này hữu ích khi cố gắng tìm hiểu về Oracle.)
Vì vậy, bài học cơ bản ở đây không phải là lỗi ORA-06512, nói riêng, không phải là thứ bạn có thể sửa trực tiếp. Thay vào đó, bạn phải tìm ra lỗi thực sự là gì, các mã lỗi khác sẽ cho bạn biết, và sau đó giải quyết từng lỗi đó.
Bạn có bất cứ lời khuyên hay thủ thuật nào của Oracle để chia sẻ không? Hãy cho chúng tôi biết về họ trong các ý kiến!
