plsql 中 IF 语句的替代选择 Into
Posted
技术标签:
【中文标题】plsql 中 IF 语句的替代选择 Into【英文标题】:Alternative for IF statement in plsql select Into 【发布时间】:2021-06-23 11:59:42 【问题描述】:我有一个使用 IF 条件的 select 语句,如下所示
If (v_block = 'apple')
then
select count(*) into v_apple_id
from table_fruits
where fruit_id = v_fruit_id;
elsif (v_block = 'mango')
then
select count(*) into v_mango_id
from table_fruits
where fruit_id = v_fruit_id;
end if;
如何通过避免使用 IF 语句来优化此查询。
v_fruit_id 将取决于 v_block 中的值。例如。如果 v_block = 'Mango' 则 v_fruit_id 将为 1234,如果 v_block = 'apple' 则 v_fruit_id 将为 1244。此处的数字(如 1234 或 1244)并不总是相同,因此应给出变量 v_fruit_id 而不是硬编码数字
我不想在这里使用 IF Else 语句,因为 v_block 有更多值,所以为了避免使用 IF else 进行大查询,我想为它找到一个替代的简单选择语句。
我还需要 into 变量来根据结果。如果是 v_block = mango,那么它应该是 v_mango_id,如果是苹果,那么它应该是 v_apple_id
【问题讨论】:
【参考方案1】:在我看来,您尝试这样做错误。
您不能也不应该为所有水果设置单独的变量。好的,现在你只有两个 - v_apple_id
和 v_mango_id
。香蕉来了怎么办?你会创建另一个v_banana_id
并修改你的程序的整个代码吗?幸运的是,你会在一两个小时内完成。明天,您将收到v_peach_id
和v_pear_id
。然后呢?
正如我所说 - 完全错误的方法。
我不知道v_block
代表什么(您从未发布过有关整个问题的太多信息),所以这里的代码应该是这样的(再次,在我看来):
CREATE OR REPLACE PROCEDURE p_fruit (
par_fruit_id IN table_fruits.fruit_id%TYPE)
IS
v_count NUMBER;
BEGIN
SELECT COUNT (*)
INTO v_count
FROM table_fruits
WHERE fruit_id = par_fruit_id;
END;
/
换句话说:创建一个将接受水果 ID 作为参数并稍后在其代码中使用它的过程。这是一般方法。它可能需要更改,但是 - 这取决于您真正想要做什么。也许它应该只是转换为一个返回例如数量的函数。苹果...目前无法判断。
【讨论】:
【参考方案2】:看来您需要一个CASE ..WHEN
表达式,例如
SELECT COUNT(*)
INTO v_apple_id
FROM table_fruits
WHERE fruit_id = CASE WHEN v_block = 'Mango' THEN 1234
WHEN v_block = 'Apple' THEN 1244 END
同时去掉v_fruit_id
参数
【讨论】:
谢谢,但我还需要根据结果输入变量。如果是 v_block = mango,那么它应该是 v_mango_id,如果是苹果,那么它应该是 v_apple_id以上是关于plsql 中 IF 语句的替代选择 Into的主要内容,如果未能解决你的问题,请参考以下文章
如何使用plsql导出oracle数据建表语句,存储过程,视图.以及表中数据
PLSQL如何导出、导入数据,如果使用语句怎么写?!(DOS命令也可以)
mybatis 中用insert into select ..... 报错命令未正确结束,但把这句sql放到plsql中执行正常