我有三个脚本来创建 table1、table2 和 table3。我需要将它们部署在不同的环境中,为此,我正在创建一个 Jenkins 管道来执行我的 SQL 脚本。
在第一次运行期间,所有脚本均已成功执行并创建了表。但是,在后续运行中,Oracle 给出错误消息:“对象已存在”,该消息显示在部署日志文件中。
我们如何捕获此验证/错误消息,以便我们可以根据它更新构建状态?
如有任何建议,我们将不胜感激。
https://www.jenkins.io/doc/pipeline/steps/sqlplus-script-runner/
pipeline {
agent any
stages {
stage('Run SQL Scripts') {
steps {
script {
def scripts = ['script1.sql', 'script2.sql', 'script3.sql']
for (script in scripts) {
step([$class: 'SQLPlusRunnerBuilder',
credentialsId: 'your-credentials-id',
instance: 'your-instance',
scriptType: 'file',
script: script])
}
}
}
}
}
}
如果我这样做,我会更改创建表的 SQL 脚本,以在运行之前检查它们是否存在:
IF((SELECT count(*) FROM dba_tables where table_name = 'TABLE_1') <= 0)
THEN
create table TABLE_1
(
ID NUMBER(3),
NAME VARCHAR2(30) NOT NULL
)
END IF;
这只会解决您现在遇到的问题,即在创建表后运行脚本会导致失败。 您将遇到的下一个问题是如何在更改架构时更新现有表。 但是,这是一个需要处理的相当复杂的问题。 您可能想采用 Liquidbase 等工具或某些模式管理框架。