Я довольно новичок в Java, но я ищу код Java, который может принимать многострочные операторы SQL, например, что-то вроде этого из простого файла:
CREATE OR REPLACE TRIGGER REQ.TR_INPT_STAY_DETAI_SQ_BI
BEFORE INSERT ON REQ.INPT_STAY_DETAIL
FOR EACH ROW
BEGIN
SELECT REQ.SQ_INPT_DETAIL.nextval INTO :new.INPT_STAY_DETAIL_PID from DUAL;
END;
И преобразуйте эти многострочные операторы в однострочные SQL-операторы, подобные этим (возможно, обернутые в это отображение), чтобы они выполнялись как один оператор JDBC для базы данных Oracle:
CREATE OR REPLACE TRIGGER REQ.TR_INPT_STAY_DETAI_SQ_BI BEFORE INSERT ON REQ.INPT_STAY_DETAIL FOR EACH ROW BEGIN SELECT REQ.SQ_INPT_DETAIL.nextval INTO :new.INPT_STAY_DETAIL_PID from DUAL; END;
Я пытался сделать это с несколькими BufferedReaders и / или с помощью метода mark (), но я не могу заставить его работать.
Проблема, похоже, заключается в точке с запятой как в конце длинного выражения, так и в конце END; заявление.
Ваши мысли о простейшем способе сделать это?
Я думаю, что добился определенного прогресса, но если в том же входном файле SQL также есть более простые команды SQL, например:
DROP TABLE TABLE.NAME_HERE;
Они потерпят неудачу при моем первом условии здесь:
if ( !thisLine.startsWith("END;") && !thisLine.equals("/") ) {
sqlBuf.append(thisLine).append(" ");
statementReady = false;
}
else if (thisLine.startsWith("END;")) {
sqlBuf.append(thisLine).append(" ");
statementReady = true;
}
else if (thisLine.equals("/")) {
statementReady = true;
}
else { }
Я проверяю переменную statemendReady позже, перед тем как запустить .execute.