Oracle
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Oracle

Con trỏ trong thủ tục trả về nhiều giá trị hơn truy vấn

Bạn có một cuộc xung đột tên. Bạn đã gọi các biến cục bộ của mình giống như tên cột và tên cột được ưu tiên, như đã lưu ý trong tài liệu:

Nếu câu lệnh SQL tham chiếu đến tên thuộc cả cột và biến cục bộ hoặc tham số hình thức thì tên cột sẽ được ưu tiên.

Thận trọng:
Khi tên biến hoặc tham số được hiểu là tên cột, dữ liệu có thể bị xóa, thay đổi hoặc chèn vào không chủ ý.

Bốn lần kiểm tra đầu tiên luôn đúng (trừ khi bạn có giá trị null), vì vậy bạn sẽ nhận được mọi hàng có done = 'N' .

Thay đổi tên biến cục bộ của bạn thành một cái gì đó khác; khá phổ biến khi sử dụng tiền tố để phân biệt giữa các biến cục bộ, tham số và cột, chẳng hạn như:

Cursor linija IS 
SELECT *
FROM table_x X
where x.mjt = l_mjt
and   x.salesman = l_salesman
and x.kind = l_kind
and x.kolo1 = l_kolo1
and x.done = 'N';

Nếu điều này nằm trong một thủ tục được lưu trữ, thay vì một khối ẩn danh, bạn có thể sử dụng tên thủ tục / hàm làm tiền tố, một số người thích. Nếu thủ tục của bạn được gọi là myproc , ví dụ, bạn có thể làm:

Cursor linija IS 
SELECT *
FROM table_x X
where x.mjt = myproc.mjt
and   x.salesman = myproc.salesman
and x.kind = myproc.kind
and x.kolo1 = myproc.kolo1
and x.done = 'N';


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Làm thế nào để Chọn một chuỗi con trong Oracle SQL cho đến một ký tự cụ thể?

  2. Làm việc với các sự kiện trong Cơ sở hạ tầng đám mây Oracle Phần 1:khái niệm cơ bản về dịch vụ

  3. SQL (ORACLE):ORDER BY và LIMIT

  4. Bảng đang thay đổi, trình kích hoạt / chức năng có thể không nhìn thấy nó (ngăn điểm trung bình giảm xuống dưới 2,5)

  5. Làm cách nào để thêm số 0 đứng đầu trong một số trong truy vấn SQL của Oracle?