问题描述
嗨,汤姆,我对一个场景有疑问。
我有一个名为test2的表
我写了一个程序。
我的疑问是我如何在where子句中的单个变量中使用多个值,如上所示。
假设p_currrency是我的用户输入。如果输入的是印度或美国,则它将按照where子句显示所需的结果。
但是,如果输入为null/除印度和美国以外,那么我想要包含印度和美国记录的结果。
请让我知道如何实现这一目标。
如果输入是我们,那就是
我有一个名为test2的表
create table test2( id number(10),country varchar2(100) ); BEGIN insert into test2 values(1,'INDIA'); insert into test2 values(2,'INDIA'); insert into test2 values(3,'INDIA'); insert into test2 values(4,'INDIA'); insert into test2 values(5,'INDIA'); insert into test2 values(6,'INDIA'); insert into test2 (ID)values(7); insert into test2 values(8,'US'); insert into test2 values(9,'US'); COMMIT; END; /复制
我写了一个程序。
create or replace procedure test3 ( p_currency in varchar2 default null ) as v_currency varchar2 (100); begin v_currency := upper (p_currency); select id into v_id from vinay_test2 where country in case when upper (p_currency) in ( 'US', 'INDIA' ) then upper (p_currency) when (upper (p_currency) is null) or (upper (p_currency) not in ( 'INDIA', 'US' )) then in ('US','INDIA') else in ('US',india) end; dbms_output.put_line ('v_id' || v_id); end; /复制
我的疑问是我如何在where子句中的单个变量中使用多个值,如上所示。
假设p_currrency是我的用户输入。如果输入的是印度或美国,则它将按照where子句显示所需的结果。
但是,如果输入为null/除印度和美国以外,那么我想要包含印度和美国记录的结果。
请让我知道如何实现这一目标。
如果输入是我们,那就是
专家解答
我不明白您查询的逻辑。示例预期输出将有所帮助!
这是我对你想做的事情的猜测:
-如果货币为null,则返回美国和印度行
-如果货币 = US或INDEX,则返回匹配国家/地区的行
-如果货币是其他货币,请返回美国和印度行
看起来像:
这是我对你想做的事情的猜测:
-如果货币为null,则返回美国和印度行
-如果货币 = US或INDEX,则返回匹配国家/地区的行
-如果货币是其他货币,请返回美国和印度行
看起来像:
var curr varchar2(10); select * from test2 where ( country in ( 'US', 'INDIA' ) and ( :curr is null or :curr not in ( 'US', 'INDIA' ) ) ) or ( :curr = country ); ID COUNTRY 1 INDIA 2 INDIA 3 INDIA 4 INDIA 5 INDIA 6 INDIA 8 US 9 US exec :curr := 'UK'; select * from test2 where ( country in ( 'US', 'INDIA' ) and ( :curr is null or :curr not in ( 'US', 'INDIA' ) ) ) or ( :curr = country ); ID COUNTRY 1 INDIA 2 INDIA 3 INDIA 4 INDIA 5 INDIA 6 INDIA 8 US 9 US exec :curr := 'INDIA'; select * from test2 where ( country in ( 'US', 'INDIA' ) and ( :curr is null or :curr not in ( 'US', 'INDIA' ) ) ) or ( :curr = country ); ID COUNTRY 1 INDIA 2 INDIA 3 INDIA 4 INDIA 5 INDIA 6 INDIA复制
文章转载自ASKTOM,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。
评论
相关阅读
【专家有话说第五期】在不同年龄段,DBA应该怎样规划自己的职业发展?
墨天轮编辑部
1488次阅读
2025-03-13 11:40:53
Oracle RAC ASM 磁盘组满了,无法扩容怎么在线处理?
Lucifer三思而后行
904次阅读
2025-03-17 11:33:53
RAC 19C 删除+新增节点
gh
551次阅读
2025-03-14 15:44:18
2月“墨力原创作者计划”获奖名单公布
墨天轮编辑部
506次阅读
2025-03-13 14:38:19
Oracle DataGuard高可用性解决方案详解
孙莹
384次阅读
2025-03-26 23:27:33
墨天轮个人数说知识点合集
JiekeXu
328次阅读
2025-04-01 15:56:03
XTTS跨版本迁移升级方案(11g to 19c RAC for Linux)
zwtian
315次阅读
2025-04-08 09:12:48
Oracle SQL 执行计划分析与优化指南
Digital Observer
281次阅读
2025-04-01 11:08:44
切换Oracle归档路径后,不能正常删除原归档路径上的归档文件
dbaking
271次阅读
2025-03-19 14:41:51
风口浪尖!诚通证券扩容采购Oracle 793万...
Roger的数据库专栏
269次阅读
2025-03-24 09:42:53