【发布时间】:2019-06-22 09:38:40
【问题描述】:
要求仅在 db 列中更新从前端编辑的那些列。 我使用的逻辑是将 2 个数组从 java 代码发送到 DB procedire。
第一个数组是:Column_array,其中包含必须更新的列名。
&
第二个数组:value_array 包含对应于 column_array 的列的值。
来自 JAVA:
Array value_array = ((OracleConnection) dbConnection).createOracleArray("STRING_ARRAY",
valueList.toArray());
Array param_array = ((OracleConnection) dbConnection).createOracleArray("STRING_ARRAY",
paramList.toArray());
stmt = dbConnection.prepareCall(SqlConstants.UPDATE_SUBSCRIBER_CONFIG_IN_BOLTES);//
stmt.setLong(1, 3628);
stmt.setLong(2, 3629);
stmt.setLong(3, 3632);
stmt.setArray(4, param_array);
stmt.setArray(5, value_array);
int count = stmt.executeUpdate();
现在在数据库端:
我怎样才能遍历这个列表来更新并在 SET 子句中设置它???
PROCEDURE update_subscriber_config (
p_app_id VARCHAR2,
p_service_id VARCHAR2,
p_pubsub_id VARCHAR2,
column_list string_array,
value_list string_array
)
AS
BEGIN
FOR a IN 1..column_list.count LOOP
update bolt_oracle_pubsub_config set
column_list(a)=value_list(a),
...how to do iteration here???
where APP_ID = p_app_id AND SERVICE_ID = p_service_id AND PUBSUB_ID = p_pubsub_id;
END LOOP;
END update_subscriber_config;
请帮忙。
【问题讨论】:
-
为什么不创建一个动态 SQL 语句字符串,只更新列表中传入的列?
-
同意。在您的代码中动态创建一条 UPDATE 语句。
-
在更新SQL中,更新有值的列,其他为空或NULL。为什么要使用两个数组来检查哪些列被更新了?
-
我们必须使用数据库程序。我怎样才能实现它,你能帮我写sql吗?
-
@NehaGoswami 我已经添加了一个答案,老实说,我认为避免使用具有列名的数组并避免使用动态 SQL,原因很简单,您可以使用一个简单的更新语句。
标签: sql oracle stored-procedures plsql dynamic-sql