prepared语句中的占位符

az31mfrm  于 2021-07-06  发布在  Java
关注(0)|答案(1)|浏览(349)

我在准备好的语句中使用下面的查询。以前我使用in-procedure和callable,但现在我尝试在jdbc prepared语句中使用select查询。
我知道我们在准备陈述时 insert into values(?,?,?); 但这里我有选择。同一变量在许多地方都被使用过。在这个查询中,我有两个变量 p_entity_type 以及 p_update_mode ```
INSERT INTO dynamicEntitynotgett
(entity_type, entity_id, entity_code, synonyms, action)
WITH data_view AS
( -- ITEM table
SELECT 'ITEM' entity_type, -- This separates inserted values
item_id data_id,
item_name data_name,
item_desc data_desc,
creation_date
FROM itemde
UNION ALL
-- ORG table
SELECT 'ORG' entity_type, -- This separates inserted values
org_id,
org_name,
org_desc,
creation_date
FROM orgde
UNION ALL
-- Feature table
SELECT 'FEATURES' entity_type, -- This separates inserted values
FEATURE_id data_id,
FEATURE_NAME data_name,
FEATURE_DESC data_desc,
CREATION_DATE
FROM FEATURESDE
)
SELECT upper(t.entity_type),
t.data_id,
t.data_name,
t.data_desc,
CASE lower(p_update_mode)
WHEN 'INCREMENTAL' THEN
CASE
WHEN t.creation_date > b.last_update_date THEN
'update'
WHEN t.creation_date < b.last_update_date THEN
'add'
END
WHEN 'full' THEN
'add'
END action
FROM data_view t
LEFT JOIN ODA_REFRESH_DETAILS b
ON b.entity_type = t.entity_type
AND lower(p_update_mode )='incremental'
WHERE (upper(p_entity_type) = t.entity_type OR p_entity_type IS NULL)
AND (lower(p_update_mode) = 'full'
OR (lower(p_update_mode) = 'incremental' AND b.entity_type IS NOT NULL)
);

我将从上游接收p\实体\类型和p\更新\模式。哪种解决方案更好?resultset或preparedstatement以及如何替换查询中的值或使用set()。
mum43rcc

mum43rcc1#

我想你在找 namedParameterStatement . 这将允许您命名参数。
我不太清楚你在陈述中指的是什么,但例如,这一行:

SELECT 'ITEM' entity_type

可替换为:

SELECT :ITEM as entity_type

哪里 :ITEM 就像一个 ? ,但可以在语句中多次使用。

相关问题