Các nhà quản lý cơ sở dữ liệu sẽ công nhận cái tên Oracle như một cường quốc trong thế giới hệ quản trị cơ sở dữ liệu quan hệ (DBMS). Oracle đã sản xuất các giải pháp DBMS có công suất rất cao trong nhiều thập kỷ và vẫn là công ty dẫn đầ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 bối rối 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.

Oracle là một hệ quản trị 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 bằng tên người dùng scott và mật khẩu tiger được đặt theo tên mèo Scotts. 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.

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à một lỗi ngoại lệ chung cho bạn biết nơi nào đó đang xảy ra sai. Đâ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 đề, chứ không phải lỗi gì đang xảy ra.

Ví dụ, một thông báo lỗi điển hình có thể đọc:

ORA-01422: exact fetch returns more than requested number of rows

ORA-06512: tại DATABASE_NAME, dòng 66

ORA-06512: ở 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 đang trả về nhiều dữ liệu hơn so với mong đợi của truy vấn nên nó không biết cách xử lý. Các ORA-01422 mã là mã lỗi thực tế mà 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 đang 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 đang 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. Chọn 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à exact fetch returns more than requested number of rows hoặc bạn cần thêm một trình xử lý ngoại lệ để yêu cầu Oracle bỏ qua nó. 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 để thực hiện.

Có hai điều bạn có thể làm. Nếu bạn mong đợi truy vấn trả về nhiều hơn một hàng, bạn có thể sửa đổi nó để không bị ngạc nhiên. Nếu bạn chỉ mong đợi truy vấn trả về một hàng duy nhất, bạn cũng có thể sửa đổi nó cho điều đó.

Mong đợi nhiều hơn một hàng duy nhất:

cho X trong (chọn * từ t ở đâu…)

vòng

– xử lý bản ghi X tại đây

kết thúc vòng lặp;

Điều này sẽ loại bỏ lỗi trong các truy vấn cơ sở dữ liệu nơi 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ả lại, bạn có thể thử:

bắt đầu

chọn * vào….

từ đâu….

tiến 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 TOO_MANY_ROWS sau đó

mã xử lý lỗi khi tìm thấy quá nhiều bản ghi

kết thúc;

Phương pháp thứ hai này sẽ chỉ phân phối một hàng duy nhất mà không làm tăng ORA-01422: exact fetch returns more than requested number of rows 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 làm mọi thứ rối tung lên nhưng vẫn cần câu trả lời.

tuyên bố

con trỏ c1 để chọn * từ t mà…

bắt đầu

mở c1;

tìm nạp c1 vào ..

if (c1% notfound) thì

xử lý lỗi không tìm thấy bản ghi

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 trước những dòng lệnh này… Oracle không sử dụng Transact-SQL mà thay vào đó là phần mở rộng ngôn ngữ thủ tục SQL, PL / SQL của riêng mình. Tương tự như Transact-SQL, PL / SQL làm được nhiều điều những thứ 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, bản thân nó 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ì, mã lỗi nào khác sẽ cho bạn biết và sau đó giải quyết từng lỗi một.

Bạn có bất kỳ mẹo hoặc thủ thuật Oracle nào để chia sẻ không? Hãy cho chúng tôi biết về chúng trong phần bình luận!

Các nhà quản lý cơ sở dữ liệu sẽ công nhận cái tên Oracle như một cường quốc trong thế giới hệ quản trị cơ sở dữ liệu quan hệ (DBMS). Oracle đã sản xuất các giải pháp DBMS có công suất rất cao trong nhiều thập kỷ và vẫn là công ty dẫn đầ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 bối rối 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.

Oracle là một hệ quản trị 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 bằng tên người dùng scott và mật khẩu tiger được đặt theo tên mèo Scotts. 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.

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à một lỗi ngoại lệ chung cho bạn biết nơi nào đó đang xảy ra sai. Đâ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 đề, chứ không phải lỗi gì đang xảy ra.

Ví dụ: một thông báo lỗi điển hình có thể đọc:

ORA-01422: exact fetch returns more than requested number of rows

ORA-06512: tại DATABASE_NAME, dòng 66

ORA-06512: ở 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 đang trả về nhiều dữ liệu hơn so với mong đợi của truy vấn nên nó không biết cách xử lý. Các ORA-01422 mã là mã lỗi thực tế mà 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 đang 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 đang 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. Chọn 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à exact fetch returns more than requested number of rows hoặc bạn cần thêm một trình xử lý ngoại lệ để yêu cầu Oracle bỏ qua nó. 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 để thực hiện.

Có hai điều bạn có thể làm. Nếu bạn mong đợi truy vấn trả về nhiều hơn một hàng, bạn có thể sửa đổi nó để không bị ngạc nhiên. Nếu bạn chỉ mong đợi truy vấn trả về một hàng duy nhất, bạn cũng có thể sửa đổi nó cho điều đó.

Mong đợi nhiều hơn một hàng duy nhất:

cho X trong (chọn * từ t ở đâu…)

vòng

– xử lý bản ghi X tại đây

kết thúc vòng lặp;

Điều này sẽ loại bỏ lỗi trong các truy vấn cơ sở dữ liệu nơi 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ả lại, bạn có thể thử:

bắt đầu

chọn * vào….

từ đâu….

tiến 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 TOO_MANY_ROWS sau đó

mã xử lý lỗi khi tìm thấy quá nhiều bản ghi

kết thúc;

Phương pháp thứ hai này sẽ chỉ phân phối một hàng duy nhất mà không làm tăng ORA-01422: exact fetch returns more than requested number of rows và do đó là 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 làm mọi thứ rối tung lên nhưng vẫn cần câu trả lời.

tuyên bố

con trỏ c1 để chọn * từ t mà…

bắt đầu

mở c1;

tìm nạp c1 vào ..

if (c1% notfound) thì

xử lý lỗi không tìm thấy bản ghi

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 trước những dòng lệnh này… Oracle không sử dụng Transact-SQL mà thay vào đó là phần mở rộng ngôn ngữ thủ tục SQL, PL / SQL của riêng mình. Tương tự như Transact-SQL, PL / SQL làm được nhiều điều những thứ 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, bản thân nó 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ì, mã lỗi nào khác sẽ cho bạn biết và sau đó giải quyết từng lỗi một.

Bạn có bất kỳ mẹo hoặc thủ thuật Oracle nào để chia sẻ không? Hãy cho chúng tôi biết về chúng trong phần bình luận!

Previous articleSamsung Galaxy S6 / S6 Edge – Cách mở khóa cho mọi nhà cung cấp dịch vụ
Next articleGoogle Pixel 2 / 2XL – Internet chậm – Phải làm gì?
Natalia Quinn là một nàng thơ của How2Geeks, hiện đang là Copywriting và là nhà biên tập nội dung có tiếng chuyên về lĩnh vực công nghệ và kỹ thuật số. Các bài viết của Natalia đều có những nét riêng và chuyên cung cấp những thông tin về công nghệ, những mẹo công nghệ hay những bản tin công nghệ hay nhất và mới nhất hiện nay.