我有一个临时表(table_B),其中包含使用嵌套表数据类型的列:
function callRandomFn(){
var k = Math.floor(Math.random() * cache.length);
return fn[cache[k]]();
};
我想在delete语句的where子句中使用nested_column,如下所示:
CREATE OR REPLACE TYPE nested_column_type AS OBJECT
(
abc_1 VARCHAR2(100),
abc_2 VARCHAR2(100),
col_id VARCHAR2(100),
tbl_id NUMBER
);
CREATE OR REPLACE TYPE nested_column_tab AS TABLE OF nested_column_type;
CREATE TABLE table_B
(col_id NUMBER,
nested_column NESTED_COLUMN_TAB)
NESTED TABLE nested_column STORE AS column_nested);
Table_A是我的目标表。我的目标是从table_A中删除记录,其中table_A.col_id NOT EXISTS在table_B.nested_column.col_id和tbl_id = v_tbl_id。
答案 0 :(得分:2)
添加更多关于@Ted提到的内容, 您需要了解object name resolution 步骤,并且必须使用表别名。这是here。
为了避免内部捕获和解决引用的类似问题, Oracle数据库要求您使用表别名来限定任何表别名 对子程序或对象属性的点符号引用。
在您的情况下,查询变为:
DELETE FROM table_A a
WHERE tbl_id = v_tbl_id
AND a.col_id NOT IN (SELECT b.col_id
FROM table_B b
WHERE (SELECT tb.tbl_id
FROM TABLE (b.nested_column) tb) =a.tbl_id);
答案 1 :(得分:1)
我认为以下内容会让您走上正确的道路:
select t.primary_id, nt.*
from table_b t, table (t.nested_column) nt
如有任何进一步的澄清,请不要犹豫再次与我联系。
泰德