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

Gặp lỗi khi thực thi Stroredprocedure

Như Nicholas Karasnov nói, bạn cần các đối số trong lệnh gọi khớp với khai báo thủ tục. Trong trường hợp này, bạn có OUT tham số, vì vậy bạn cần một nơi nào đó cho dữ liệu bạn đang chọn - thứ gì đó tương ứng với sys_refcursor loại tham số.

Nếu bạn đang sử dụng SQL * Plus để kiểm tra điều này, bạn có thể khai báo Biến SQL * Plus cho điều này và sau đó chuyển nó dưới dạng biến liên kết, sau đó sử dụng print lệnh để hiển thị nội dung con trỏ:

variable rc refcursor
exec javao(1, :rc);
print rc

Điều này cũng hoạt động trong Nhà phát triển SQL. Khi bạn gọi thủ tục từ mã khác, bạn sẽ có một biến được khai báo trong khối PL / SQL hoặc trong ứng dụng bên ngoài (ví dụ:qua jdbc ), nhưng chi tiết của những điều đó phụ thuộc vào những gì bạn đang làm.

Để gọi từ Java, bạn phải làm như sau:

// get connection
CallableStatement cStmt = conn.prepareCall("{ call javao(?, ?) }");
cStmt.setInt(1, 1);
cStmt.registerOutParameter(2, OracleTypes.cursor);
cStmt.execute();
ResultSet rSet = ((OracleCallableStatement) cStmt).getCursor(2);
while (rSet.next())
{
    // get columns from result set row and do something with the data
}

... nhưng điều đó nằm trong mã giả và bạn sẽ cần đọc tài liệu để điền vào chỗ trống (và sửa bất kỳ lỗi nào; có thể bạn cần các loại câu lệnh dành riêng cho Oracle chẳng hạn) và thêm đóng đối tượng và xử lý lỗi tất cả những thứ tốt khác.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Oracle:Trả về nhiều giá trị trong một hàm

  2. Cập nhật giá trị thông qua trình kích hoạt SAU KHI CẬP NHẬT Oracle 11g

  3. chức năng tổng hợp oracle với nhiều cột

  4. Lỗi khôi phục giao dịch JDBC khi kết nối đã đóng

  5. Truy vấn Oracle để tổng hợp QTY theo năm- chỉ kéo dài 3 năm