PostgreSQL
 sql >> Teknologi Basis Data >  >> RDS >> PostgreSQL

Parameter Nilai Tabel JDBC Postgresql

Dengan asumsi Anda ingin meneruskan nilai dari klien . Jika nilai sudah ada di database, ada cara lain yang lebih sederhana.

Sintaks untuk array tipe_komposit

Apa yang dapat Anda lewati tampaknya dibatasi oleh Jenis Java dan Jenis JDBC , dan sepertinya tidak ada ketentuan untuk tipe array, apalagi array nilai komposit ...

Namun, Anda selalu dapat mengirimkan text perwakilan. Saya membangun dua fakta dasar:

  1. Mengutip manual :

Penekanan saya yang berani. Oleh karena itu, setelah Anda membuat ketik number_with_time seperti yang didefinisikan dalam pertanyaan Anda, atau mendefinisikan tabel dengan kolom yang sama yang mendaftarkan tipe baris dalam sistem secara otomatis, Anda juga dapat menggunakan tipe array number_with_time[] .

  1. Ada text representasi untuk setiap nilai.

Oleh karena itu, ada juga representasi teks untuk number_with_time[] :

'{"(1,2014-04-20 20:00:00)","(2,2014-04-21 21:00:00)"}'::number_with_time[]

Panggilan fungsi

Panggilan fungsi yang sebenarnya bergantung pada nilai kembalian yang ditentukan dalam fungsi Anda - yang tersembunyi dalam pertanyaan Anda.

Untuk menghindari komplikasi dari penanganan array di JDBC, berikan text perwakilan. Buat fungsi dengan mengambil text parameter.

Saya tidak akan menggunakan nama "tanggal" untuk timestamp . Bekerja dengan definisi tipe yang sedikit disesuaikan ini:

CREATE TYPE number_with_time AS(
   _num float
 , _ts  timestamp
);

Fungsi SQL sederhana:

CREATE OR REPLACE FUNCTION myfunc_sql(_arr_txt text)
  RETURNS integer       -- example
  LANGUAGE sql AS
$func$
   SELECT sum(_num)::int
   FROM   unnest (_arr_txt::number_with_time[]) x
   WHERE  _ts > '2014-04-19 20:00:00';
$func$;

Telepon:

SELECT myfunc_sql('{"(1,2014-04-20 20:00:00)","(2,2014-04-21 21:00:00)"}');

db<>fiddle di sini
Lama sqlfiddle

Mendemonstrasikan:

  • di atas fungsi SQL
  • Varian PL/pgSQL
  • beberapa varian sintaks untuk larik tipe komposit
  • fungsi memanggil

Panggil fungsi seperti fungsi lainnya dengan menggunakan text sederhana parameter:

CallableStatement myProc = conn.prepareCall("{ ? = call myfunc_sql( ? ) }");
myProc.registerOutParameter(1, Types.VARCHAR);
// you have to escape double quotes in a Java string!
myProc.setString(2, "{\"(1,2014-04-20 20:00:00)\",\"(2,2014-04-21 21:00:00)\"}");
myProc.execute();
String mySum = myProc.getInt(1);
myProc.close(); 

Detail dalam manual Postgres JDBC di sini.

Contoh untuk mengembalikan seluruh tabel melalui JDBC:



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Bagaimana cara mendapatkan substring dari tabel sql?

  2. Kunci asing di tabel pertama

  3. Bagaimana cara membuat TimescaleDB Hypertable dengan partisi waktu pada stempel waktu yang tidak unik?

  4. Pilih nama kolom dan nilai dari tabel

  5. Struktur kontrol PL/pgSQL untuk daftar/array