PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Стойни параметри на Postgresql JDBC таблица

Ако приемем, че искате да предадете стойности от клиента . Ако стойностите вече съществуват в базата данни, има други, по-прости начини.

Синтаксис за масив от composite_type

Това, което можете да преминете, изглежда е ограничено от Типове Java и JDBC типове , и изглежда няма разпоредби за типове масиви, да не говорим за масиви от съставни стойности ...

Винаги обаче можете да подадете text представителство. Разчитам на два основни факта:

  1. Цитиране на ръководството :

Удебелен акцент мой. Следователно, след като сте създали типа number_with_time както е дефинирано във вашия въпрос, или дефинирана таблица със същите колони, която автоматично регистрира типа ред в системата, можете също да използвате типа масив number_with_time[] .

  1. Има text представителство за всеки стойност.

Следователно има и текстово представяне за number_with_time[] :

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

Извикване на функция

Действителното извикване на функция зависи от върнатите стойности, дефинирани във вашата функция - което е скрито във вашия въпрос.

За да избегнете усложнения от обработката на масиви в JDBC, предайте text представителство. Създайте функцията, като вземете text параметър.

Няма да използвам името „дата“ за timestamp . Работа с тази леко коригирана дефиниция на тип:

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

Проста SQL функция:

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

Обаждане:

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

db<>fiddle тук
Стар sqlfiddle

Демонстрираме:

  • над SQL функция
  • PL/pgSQL вариант
  • няколко варианта на синтаксис за масива от съставен тип
  • функцията извиква

Извикайте функцията като всяка друга функция, приемаща прост text параметър:

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(); 

Подробности в ръководството за Postgres JDBC тук.

Пример за връщане на цяла таблица чрез 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. Как да изградим нормализирана таблица от един денормализиран текстов файл?

  2. JPA генерира дублиращи се ключове

  3. Как мога да ускоря разликата между таблиците?

  4. Как да използвате вътрешни съединения с подзаявки в Laravel Eloquent

  5. Избиране на редове, подредени по една колона и различни от друга