Каков правильный синтаксис для изменения терминатора команды sql с использованием удаленного подключения с помощью драйвера jdbc

Я использую jdbc (com.ibm.db2.jcc.DB2Driver v. 1.4.2) для подключения базы данных DB2. если мне нужно создать процедуру вроде:

CREATE PROCEDURE "Schema".makeUniqueCode(IN keyName VARCHAR(30),IN fieldName VARCHAR(30), IN tableName VARCHAR(30))
LANGUAGE SQL
BEGIN
DECLARE COD VARCHAR(30);
DECLARE LASTCOD VARCHAR(30);
DECLARE at_end INT DEFAULT 0;
...
END%

Мне нужно изменить терминатор команды sql с ; на новый символ... выбираю %

Если я помещу команду создания процедуры в файл .sql и использую db2 CLI (подсказка db2), довольно просто изменить терминатор команды sql.

Моя проблема в том, что мне нужно использовать удаленное соединение с помощью драйвера jdbc для выполнения команды создания процедуры.

Каков правильный синтаксис для изменения терминатора команды sql с использованием удаленного подключения с помощью драйвера jdbc?

С наилучшими пожеланиями


person Leonardo Saracini    schedule 08.02.2013    source источник
comment
Операторы в JDBC не должны иметь терминатора (но некоторые драйверы/базы данных это позволяют), вы должны выполнять только один оператор в execute (хотя некоторые драйверы поддерживают несколько операторов в одном execute). Драйвер должен (обычно) рассматривать CREATE .. BEGIN ... END как один оператор.   -  person Mark Rotteveel    schedule 08.02.2013


Ответы (2)


Терминатор команды — это функция программ, которые подключаются к базе данных, а не сама база данных. База данных совершенно не знает о существовании файла SQL, например, в котором есть несколько команд, разделенных разделителем. Редактор или клиент SQL — это место, где они обрабатываются.

Теперь вы пишете программу, которая подключается к базе данных, поэтому, если вы хотите запустить несколько команд, вам придется управлять этим самостоятельно. JDBC и другие драйверы баз данных предоставляют интерфейс для выполнения отдельных команд. Вам просто нужно использовать этот интерфейс для каждой команды, которую вы хотите запустить.

Если вы хотите иметь возможность выполнять сразу несколько команд с помощью одного вызова из JDBC, поместите их в хранимую процедуру или используйте что-то вроде BEGIN ATOMIC...END.

person Community    schedule 08.02.2013

Я думаю, что на этот вопрос на самом деле еще нет ответа, потому что то, что пытается сделать Леонардо, совершенно правильно: отправка одного оператора DDL для CREATE PROCEDURE через JDBC, который, однако, включает в себя тело подпрограммы с несколькими операторами внутри процедуры.

Вы можете взглянуть на официальные образцы DB2, как отправить это. Это для DDL для триггера, но это также относится к DDL для подпрограмм:

https://www.ibm.com/support/knowledgecenter/SSEPGG_11.1.0/com.ibm.db2.luw.apdv.sample.doc/doc/java_jdbc/s-TbTrig-java.html

person Torsten Steinbach    schedule 12.07.2016