我的要求是用戶必須能夠從穿梭頁面專案中選擇他們需要從表中洗掉的員工編號。在后端,我有一個 plsql 代碼,它應該洗掉選定的員工編號,如下所示:
BEGIN
delete from employees where empno in (:P7_EMPLOYEE_NUMBER);
END;
此外,我將在代碼中有更多邏輯來做其他事情,但是我無法洗掉多行,如果我在穿梭專案中選擇 1 個員工編號,當我嘗試洗掉更多時,我可以成功洗掉記錄不止一條記錄,我不斷收到以下錯誤:
Ajax call returned server error ORA-01722: invalid number for Execute Server-Side Code
我將代碼更改為:
BEGIN
delete from employees where empno in (to_number(:P7_EMPLOYEE_NUMBER));
END;
我不斷收到相同的錯誤訊息。
我怎樣才能使這項作業?
uj5u.com熱心網友回復:
API 有APEX_STRING許多實用函式來處理多值頁面專案(選擇串列、復選框、穿梭)。要將冒號分隔的串列轉換為陣列,請使用APEX_STRING.SPLIT.
DELETE
FROM
employees
WHERE empno IN
(SELECT column_value
FROM table(apex_string.split(: P7_EMPLOYEE_NUMBER,':'))
);
uj5u.com熱心網友回復:
穿梭專案包含以冒號分隔的值,這意味著您必須將其拆分為行,例如
delete from employees
where empno in (select regexp_substr(:P7_EMPLOYEE_NUMBER, '[^:] ', 1, level)
from dual
connect by level <= regexp_count(:P7_EMPLOYEE_NUMBER, ':') 1
);
uj5u.com熱心網友回復:
APEX 引擎將始終將多值專案作為單個冒號分隔的字串提交,例如:1:2:3:4
您需要將字串拆分為多個值,以便您可以處理它們。有多種方法可以做到這一點:
- 在子查詢中使用APEX_STRING.SPLIT或APEX_STRING.SPLIT_NUMBERS API
delete from employees
where empno in (select column_value
from apex_string.split_numbers(:P7_EMPLOYEE_NUMBER, ':'));
- 將 APEX_STRING API 與 MEMBER OF 函式一起使用
delete from employees
where empno member of apex_string.split_numbers(:P7_EMPLOYEE_NUMBER, ':');
請注意,成員需要具有相同的型別。在這種情況下,empno 是一個數字,因此您必須使用 split_numbers API。
- 使用正則運算式拆分值
delete from employees
where empno in (select regexp_substr(:P7_EMPLOYEE_NUMBER, '[^:] ', 1, level)
from dual
connect by level <= regexp_count(:P7_EMPLOYEE_NUMBER, ':') 1
);
我更喜歡使用選項 2,因為它的代碼更少且更易于閱讀。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/472556.html
