【问题标题】:Oracle 11g: How to dynamically select multiple columns into BULK COLLECTOracle 11g:如何动态选择多列进入 BULK COLLECT
【发布时间】:2017-03-30 20:08:33
【问题描述】:

我有一个类似于下面示例的查询,我想使用连接从具有 4 列的表中动态批量收集 2 列,但我不断收到“变量不在选择列表中”的错误。我相信这是因为查询的列比表少,但我不知道如何绕过它。

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;

以下是表格示例:

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

【问题讨论】:

  • 您只选择了 2 个值,并尝试将它们放入具有 5 个属性的类型中。

标签: oracle plsql oracle11g bulk-collect


【解决方案1】:

您正在从两个不同的表中进行选择,并尝试将其放入一个表的行类型中。

您可能想采取不同的方法 - 像这样:

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;

【讨论】:

    猜你喜欢
    • 2021-12-10
    • 2019-01-10
    • 1970-01-01
    • 1970-01-01
    • 2014-06-24
    • 1970-01-01
    • 2012-05-06
    • 1970-01-01
    • 2013-12-01
    相关资源
    最近更新 更多