我正在嘗試從關聯陣列中查找值以更新表,但出現錯誤。這是演示該問題的最少代碼(我的實際查詢要復雜得多)。
我是否遺漏了什么,或者如果這是 Oracle 限制,有沒有辦法解決它?
CREATE TABLE t_employee AS SELECT cast('john' as varchar2(30)) emp_name, CAST (NULL AS NUMBER (5)) emp_id FROM DUAL;
DECLARE
TYPE emp_typ IS TABLE OF NUMBER INDEX BY VARCHAR2(30);
emp_lookup emp_typ;
BEGIN
emp_lookup ('john') := 1234;
UPDATE t_employee e
SET emp_id = (SELECT emp_lookup (e.emp_name) FROM DUAL);
END;
/
--DROP TABLE t_employee;
> PLS-00201:必須宣告識別符號“E.EMP_NAME”
當我將更新更改為更簡單的構造時:
UPDATE t_employee SET emp_id = emp_lookup (t_employee.emp_name);
我很奇怪:PLS-00382:運算式型別錯誤
與 SELECT 相同。在我看來,我們不能直接在 SQL 陳述句中使用關聯陣列。
uj5u.com熱心網友回復:
關聯陣列集合是僅限 PL/SQL 的資料型別;它不能在 SQL 陳述句中使用。
從Oracle 檔案:
表 5-1 PL/SQL:集合型別
收藏型別 元素數量 索引型別 密集或稀疏 未初始化狀態 在哪里定義 可以是 ADT 屬性資料型別 關聯陣列(或索引表) 未指定 字串或 PLS_INTEGER 任何一個 空的 在 PL/SQL 塊或包中 不 VARRAY(可變大小陣列) 指定的 整數 總是密集 空值 在 PL/SQL 塊或包中或在模式級別 僅當在架構級別定義時 嵌套表 未指定 整數 開始密集,可以變得稀疏 空值 在 PL/SQL 塊或包中或在模式級別 僅當在架構級別定義時
...
一個關聯陣列(以前稱為PL / SQL表或索引表)是一組鍵-值對。
...
與資料庫表不同,關聯陣列:
- 不需要磁盤空間或網路操作
- 不能用 DML 陳述句操作
VARRAY SQL 陳述句中可以使用嵌套表集合。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/336352.html
