簡體   English   中英

Oracle-在where子句中使用嵌套表列

[英]Oracle - using nested table column in where clause

我有一個臨時表(table_B),其中的列使用嵌套表數據類型:

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);

我想在delete語句的where子句中使用nested_column,如下所示:

DELETE FROM table_A a
WHERE tbl_id = v_tbl_id
AND NOT EXISTS (SELECT col_id 
                  FROM TABLE(SELECT b.nested_column 
                               FROM table_B b 
                              WHERE tbl_id = v_tbl_id) 
                 WHERE col_id = a.col_id);

Table_A是我的目標表。 我的目標是從table_A中刪除記錄,其中table_B.nested_column.col_id中的table_A.col_id不存在,並且tbl_id = v_tbl_id。

在@Ted提到的內容上添加更多內容,您需要了解對象名稱解析的步驟,並且必須使用表別名。 這是提到在這里

為避免內部捕獲和解決引用的類似問題,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);

我認為以下內容將使您走上正確的道路:

select t.primary_id, nt.*
from table_b t, table (t.nested_column) nt

如有任何其他澄清,請隨時在這里與我聯系。

攤曬

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM