oracle - 如何将 pl/sql 查询更改为 2“WHERE”子句
问题描述
我有 PL/SQL 查询对于一个交互式网格有 2 个不同的 WHERE 子句 ( WHERE(1)
, WHERE(2)
),我有一个参数 if parameter has value is 1
then PL/SQL query will run with WHERE(1)
else parameter has value is 2
then PL/SQL query run with WHERE(2)
, 希望有人可以解决我的问题,非常感谢。这是我的 PL/SQL 查询:
if :P140101101_CHANGE = 1 then
select T.RDE_ID,
T.RDE_SIP,
T.V_IIT_CODE,
T.V_IIT_NAME
from V_REQUISITION_DETAILS_V6 T
WHERE (T.REQ_ID = :P140101101_V_REQ_ID)
if :P140101101_CHANGE = 2 then
SELECT T.RDE_ID,
T.RDE_SIP,
T.V_IIT_CODE,
T.V_IIT_NAME
FROM V_REQUISITION_DETAILS_V6 T
WHERE (T.REQ_ID = ::P140101101_V_REQ_ID)
AND EXISTS (SELECT 1
FROM V_PRICE_LIST_LINES_PO32 PRI
WHERE PRI.Iit_Id = T.Iit_Id)
and (T.PLL_ID IS NULL)
解决方案
您可以OR
按如下方式使用条件:
SELECT T.RDE_ID,
T.RDE_SIP,
T.V_IIT_CODE,
T.V_IIT_NAME
FROM V_REQUISITION_DETAILS_V6 T
WHERE (T.REQ_ID = :P140101101_V_REQ_ID)
AND ( :P140101101_V_REQ_ID <> 2 OR (EXISTS (SELECT 1
FROM V_PRICE_LIST_LINES_PO32 PRI
WHERE PRI.Iit_Id = T.Iit_Id)
and (T.PLL_ID IS NULL)))
更新:4个条件
SELECT T.RDE_ID,
T.RDE_SIP,
T.V_IIT_CODE,
T.V_IIT_NAME
FROM V_REQUISITION_DETAILS_V6 T
WHERE (T.REQ_ID = :P140101101_V_REQ_ID)
-- condition for 1 is irrelevant here
-- AND ( :P140101101_SREACH_PRICE <> 1 OR (T.REQ_ID = :P140101101_V_REQ_ID))
AND ( :P140101101_SREACH_PRICE <> 2 OR (EXISTS (SELECT 1
FROM V_PRICE_LIST_LINES_PO32 PRI
WHERE PRI.Iit_Id = T.Iit_Id)
and (T.PLL_ID IS NULL)))
AND ( :P140101101_SREACH_PRICE <> 3 OR (NOT EXISTS (SELECT 1
FROM V_PRICE_LIST_LINES_PO32 PRI
WHERE PRI.Iit_Id = T.Iit_Id)))
AND ( :P140101101_SREACH_PRICE <> 4 OR (T.PLL_ID IS NOT NULL))
推荐阅读
- python - 在python中匹配单词到单词的内容
- android - 如何在 Android 的底部导航视图顶部添加线条?
- python - 没有这样的元素:无法找到元素 python id
- sql-server - 如何制作一个读取 SQL Server 单行的所有列并且输出是向量的函数
- c++ - 仅运行双实例
- python - 如果在单独的列表中有错误值,有没有办法省略图中的数据点?
- android - Android 改造拦截器无法链接更新的 Prefs 值
- java - 字节变量不能用Java表示125吗?
- swift - 使用 Swift 和 Firebase 上传照片
- reactjs - 编译失败 - React 路由器 dom 解析错误