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

Truy xuất kết quả khối PLSQL ẩn danh

Đó là bởi vì ẩn ý chuyển đổi ngày không thành công. Thêm TO_DATE() thay vì chỉ định trực tiếp chuỗi ngày tháng cho một biến ngày tháng. Nếu java.sql.Date được sử dụng, TO_DATE() không bắt buộc.

Chuyển đổi ngầm định thường phụ thuộc vào NLS_DATE_FORMAT của phiên .

Trong trường hợp của bạn in_cnt__date DATE := '&1' là thủ phạm. &1 thực sự sẽ được cố gắng chuyển đổi thành một ngày .. Và do đó ngoại lệ được ném ra!

public static final String CONTEXT = "DECLARE in_cnt__date DATE := ? ;" +
"hv_cnt_id NUMBER := 0; " +
"BEGIN DBMS_OUTPUT.ENABLE (NULL); " +
"INSERT INTO dt_contexts (CNT_ID, CNT_CONTEXT, CNT_TYPE, CNT_SOURCE, CNT_COMMENT, CNT_DATE, CNT_DATE_INSERT, CNT_DATE_UPDATE) " +
"VALUES (0, 'EPE_CONTEXT', 'ROUTE', 'bdd', 'Built from ROUTE', in_cnt__date, SYSDATE, SYSDATE); " +
"SELECT SEQ_DT_CNT_ID.CURRVAL INTO hv_cnt_id FROM DUAL; " +
"? := hv_cnt_id;
"EXCEPTION WHEN OTHERS THEN RAISE ; END;";

Và sau đó,

cs.setDate(1, (java.sql.Date) Route.datePrf);

Sẽ đặt ngày cho in_cnt__date;

Cuối cùng, để truy xuất các giá trị trong hv_cnt_id Phần bên dưới được thêm vào PL/SQL của bạn khối

"? := hv_cnt_id;"

Và từ JDBC, chúng tôi nhận được nó giống như,

 cs.setDate(1, (java.sql.Date) Route.datePrf);
 cs.registerOutParameter(2, Types.NUMBER);
 cs.execute();
 contextId = cs.getInt(2);


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Tải tệp csv khổng lồ vào bảng cơ sở dữ liệu oracle bằng Pyspark

  2. Cần đặt lại giá trị của chuỗi trong Oracle

  3. Tiêu chuẩn ANSI SQL cho từ khóa ORACLE MINUS

  4. Hai hàng được chèn như thế nào?

  5. Có đầu ra PL / SQL trong thời gian thực