我需要 PL/SQL 代碼來掃描表(與 Apex 中的第 5 頁相關),查看是否存在具有兩個變數(特定 ID 和 1-3 之間的特定數字)的行,然后將該行中的第三個變數回傳到一個 Oracle Apex 專案(這是第 10 頁的動態操作),如果有的話。我可以使用 SELECT 陳述句執行此操作,并且它可以正常作業:
select VARIABLE_3 into :P10_ITEM from TABLE where (ID = :P10_ID and NUM = '1');
但是我不能單獨使用該陳述句,因為如果該行不存在,它會拋出有關丟失資料的錯誤。所以我需要這個作為 IF 或 CASE。但是當我嘗試將它寫為 IF 或 CASE 時,它什么也不回傳。
if (:P10_ID = :P5_ID and :P5_NUM = '1') then
select VARIABLE_3
into :P10_ITEM
from TABLE
where (ID = :P10_ID and NUM = '1');
end if;
示例資料類似于(所有列都是 NUMBER 型別):
ID ... NUM ... VARIABLE_3
-------------------------
10 ... 1 ... 23
10 ... 2 ... 24
11 ... 1 ... 25
11 ... 2 ... 26
11 ... 3 ... 27
12 ... 1 ... 28
它驗證良好并且不會引發任何錯誤,但它也沒有給出任何結果。如果我添加一個else :P10_ITEM := '0'; 然后它將回傳 0,因此提交/回傳很好,我知道動態操作正在運行。有什么建議嗎?
uj5u.com熱心網友回復:
關于SELECT您發布的第 1 條宣告以及您對此的評論:
但是我不能單獨使用該陳述句,因為如果該行不存在,它會拋出有關丟失資料的錯誤。
有一個簡單的方法 - 聚合函式。
例如,斯科特的dept表:
SQL> select * From dept;
DEPTNO DNAME LOC
---------- -------------- -------------
10 ACCOUNTING NEW YORK
20 RESEARCH DALLAS
30 SALES CHICAGO
40 OPERATIONS BOSTON
這是您當前的查詢,它以 no_data_found 結束:
SQL> select dname from dept where deptno = 12 and loc = 'DALLAS';
no rows selected
或者,在 PL/SQL(這是 Apex 使用的)中:
SQL> declare
2 l_dname dept.dname%type;
3 begin
4 select dname
5 into l_dname
6 from dept
7 where deptno = 12
8 and loc = 'DALLAS';
9 end;
10 /
declare
*
ERROR at line 1:
ORA-01403: no data found
ORA-06512: at line 4
SQL>
但是,如果你使用MAX它(列),那么結果是NULL,不再有錯誤:
SQL> select max(dname) from dept where deptno = 12 and loc = 'DALLAS';
MAX(DNAME)
--------------
SQL> declare
2 l_dname dept.dname%type;
3 begin
4 select max(dname)
5 into l_dname
6 from dept
7 where deptno = 12
8 and loc = 'DALLAS';
9 end;
10 /
PL/SQL procedure successfully completed.
SQL>
看?現在只需檢查變數的值并執行您想做的任何操作。
在你的情況下:
SELECT MAX(variable_3)
INTO :P10_ITEM
FROM some_table
WHERE ( id = :P10_ID
AND num = '1');
IF :P10_ITEM IS NOT NULL THEN
... do something
ELSE
... do something else
END IF;
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/402355.html
標籤:
