未经测试的水域,我正在尝试找到一种缓解问题的方法。而不是在 PL-SQL 的游标中进行嵌套选择。我试图在游标中提出一个案例。由于游标可以有不同的输入参数,因此我需要相应地对内容进行排序。
这可能吗?我的代码看起来像这样。很容易读懂 ao_in 是 Inparam。
PROCEDURE theProcedure (ao_in IN VARCHAR2)
CURSOR order_cur
IS
Case when ao_in = 'NIEC'
then
SELECT t1.nr, t1.status$nr
FROM eh_order_t@NGEXT_DBLINK t1
WHERE t1.status$nr IN (3, 6)
AND ao_in =
DECODE (ao_in, 'NIEC', ao_in, get_ehorder_ao (t1.nr))
AND t1.nr = DECODE (order_in, NULL, t1.nr, order_in)
ORDER BY t1.skapad_dat ASC;
when ao_in = 'DSSP' then
SELECT t1.nr, t1.status$nr
FROM eh_order_t@NGEXT_DBLINK t1
WHERE t1.status$nr IN (3, 6)
AND ao_in =
DECODE (ao_in, 'DSSP', ao_in, get_ehorder_ao (t1.nr))
AND t1.nr = DECODE (order_in, NULL, t1.nr, order_in)
ORDER BY t1.skapad_dat ASC;
when ao_in = 'ALLA'
SELECT t1.nr, t1.status$nr
FROM eh_order_t@NGEXT_DBLINK t1
WHERE t1.status$nr IN (3, 6)
AND ao_in =
DECODE (ao_in, 'ALLA', ao_in, get_ehorder_ao (t1.nr))
AND t1.nr = DECODE (order_in, NULL, t1.nr, order_in)
ORDER BY t1.skapad_dat ASC;
end
最佳答案
你想要的可以用 OPEN-FOR 完成语句,像这样:
PROCEDURE theProcedure (ao_in IN VARCHAR2)
TYPE t_cur IS REF CURSOR;
order_cur t_cur;
begin
Case when ao_in = 'NIEC'
then
open order_cur for
SELECT t1.nr, t1.status$nr
FROM eh_order_t@NGEXT_DBLINK t1
WHERE t1.status$nr IN (3, 6)
AND ao_in = 'NIEC'
AND t1.nr = DECODE (order_in, NULL, t1.nr, order_in)
ORDER BY t1.skapad_dat ASC;
when ao_in = 'DSSP' then
open order_cur for
SELECT t1.nr, t1.status$nr
FROM eh_order_t@NGEXT_DBLINK t1
WHERE t1.status$nr IN (3, 6)
AND ao_in = 'DSSP'
AND t1.nr = DECODE (order_in, NULL, t1.nr, order_in)
ORDER BY t1.skapad_dat ASC;
when ao_in = 'ALLA'
open order_cur for
SELECT t1.nr, t1.status$nr
FROM eh_order_t@NGEXT_DBLINK t1
WHERE t1.status$nr IN (3, 6)
AND ao_in ='ALLA'
AND t1.nr = DECODE (order_in, NULL, t1.nr, order_in)
ORDER BY t1.skapad_dat ASC;
end;
end;
请注意,不需要对 ao_in 参数进行解码评估,因为 已经在 case 语句中进行了评估。 我假设 order_in 是在原始代码的某处声明的,并且为了简化没有发布在这里,否则应该声明它。
关于sql - 在 Cursor 中的情况,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31513236/