Oracle 11g:如何动态地 select 多列到 BULK COLLECT
Oracle 11g: How to dynamically select multiple columns into BULK COLLECT
我有一个类似于下面示例的查询,我想使用从具有 4 列的 table 的连接动态批量收集 2 列,但我不断收到 'variable not in select list' 的错误.我相信这是因为查询的列少于 table,但我不知道如何解决它。
DECLARE
TYPE test_table_type IS TABLE OF TEST_PRODUCTS%ROWTYPE;
BULK_COLLECTOR test_table_type;
BEGIN
EXECUTE IMMEDIATE
'SELECT tp.PRODUCT AS PRODUCT, td.ALT_DESCRIPTION AS DESCRIPTION
FROM TEST_PRODUCTS tp
JOIN ALT_DESCRIPTIONS td ON tp.ALT_DESCRIPTION_ID = td.ALT_DESCRIPTION_ID'
BULK COLLECT INTO BULK_COLLECTOR;
END;
以下是 table 的示例:
CREATE TABLE TEST_PRODUCTS
(
PRODUCT_ID NUMBER,
PRODUCT VARCHAR2(50),
DESCRIPTION VARCHAR2(255)
ALT_DESCRIPTION_ID NUMBER,
INVENTORY_CODE VARCHAR2(100)
);
CREATE TABLE ALT_DESCRIPTIONS
(
ALT_DESCRIPTION_ID NUMBER,
ALT_DESCRIPTION VARCHAR2(255)
);
您正在从两个不同的 table 中进行选择,并试图将其放入一个 table 的行类型中。
您可能想采用不同的方法 - 像这样:
DECLARE
TYPE test_record IS RECORD
(
PRODUCT VARCHAR2(50),
ALT_DESCRIPTION VARCHAR2(255)
);
type test_tab is table of test_record;
BULK_COLLECTOR test_tab;
BEGIN
EXECUTE IMMEDIATE
'SELECT tp.PRODUCT AS PRODUCT, td.ALT_DESCRIPTION AS DESCRIPTION
FROM TEST_PRODUCTS tp
JOIN ALT_DESCRIPTIONS td ON tp.ALT_DESCRIPTION_ID = td.ALT_DESCRIPTION_ID'
BULK COLLECT INTO BULK_COLLECTOR;
END;
我有一个类似于下面示例的查询,我想使用从具有 4 列的 table 的连接动态批量收集 2 列,但我不断收到 'variable not in select list' 的错误.我相信这是因为查询的列少于 table,但我不知道如何解决它。
DECLARE
TYPE test_table_type IS TABLE OF TEST_PRODUCTS%ROWTYPE;
BULK_COLLECTOR test_table_type;
BEGIN
EXECUTE IMMEDIATE
'SELECT tp.PRODUCT AS PRODUCT, td.ALT_DESCRIPTION AS DESCRIPTION
FROM TEST_PRODUCTS tp
JOIN ALT_DESCRIPTIONS td ON tp.ALT_DESCRIPTION_ID = td.ALT_DESCRIPTION_ID'
BULK COLLECT INTO BULK_COLLECTOR;
END;
以下是 table 的示例:
CREATE TABLE TEST_PRODUCTS
(
PRODUCT_ID NUMBER,
PRODUCT VARCHAR2(50),
DESCRIPTION VARCHAR2(255)
ALT_DESCRIPTION_ID NUMBER,
INVENTORY_CODE VARCHAR2(100)
);
CREATE TABLE ALT_DESCRIPTIONS
(
ALT_DESCRIPTION_ID NUMBER,
ALT_DESCRIPTION VARCHAR2(255)
);
您正在从两个不同的 table 中进行选择,并试图将其放入一个 table 的行类型中。
您可能想采用不同的方法 - 像这样:
DECLARE
TYPE test_record IS RECORD
(
PRODUCT VARCHAR2(50),
ALT_DESCRIPTION VARCHAR2(255)
);
type test_tab is table of test_record;
BULK_COLLECTOR test_tab;
BEGIN
EXECUTE IMMEDIATE
'SELECT tp.PRODUCT AS PRODUCT, td.ALT_DESCRIPTION AS DESCRIPTION
FROM TEST_PRODUCTS tp
JOIN ALT_DESCRIPTIONS td ON tp.ALT_DESCRIPTION_ID = td.ALT_DESCRIPTION_ID'
BULK COLLECT INTO BULK_COLLECTOR;
END;