Oracle
 sql >> Teknologi Basis Data >  >> RDS >> Oracle

Ambil hasil blok PLSQL anonim

Itu karena implisit konversi tanggal gagal. Tambahkan TO_DATE() alih-alih secara langsung menetapkan string tanggal ke variabel tanggal. Jika java.sql.Date digunakan, TO_DATE() tidak diperlukan.

Konversi implisit biasanya bergantung pada NLS_DATE_FORMAT sesi .

Dalam kasus Anda in_cnt__date DATE := '&1' adalah pelakunya. &1 sebenarnya akan dicoba untuk diubah menjadi tanggal.. Dan karenanya pengecualian dilemparkan!

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;";

Dan kemudian,

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

Akan menyetel tanggal untuk in_cnt__date;

Terakhir, untuk mengambil nilai dalam hv_cnt_id Di bawah ini ditambahkan ke PL/SQL Anda blokir

"? := hv_cnt_id;"

Dan dari JDBC, kami mendapatkannya seperti,

 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. Penentuan dan pengaturan Edisi R12.2

  2. Cadangan Online Vs Offline

  3. java.lang.UnsatisfiedLinkError:tidak ada ocijdbc11 di java. perpustakaan.path

  4. Cara menyisipkan beberapa baris dalam tabel yang sama-Oracle 10g

  5. Bisakah JOB dibuat secara dinamis di dalam pemicu?