Oracle ORA-00904:尝试使用嵌套表执行PL/SQL存储过程时出现无效标识符错误

Oracle ORA-00904:尝试使用嵌套表执行PL/SQL存储过程时出现无效标识符错误,oracle,plsql,oracle11g,Oracle,Plsql,Oracle11g,我正在尝试执行一个使用嵌套表的存储过程,但是出现以下错误。我已经检查了传递到集合中的值,它传递了正确数量的值。我做了一个insert查询,它工作得很好,所以我不确定该过程为什么没有执行 LINE/COL ERROR -------- ----------------------------------------------------------------- 28/5 PL/SQL: SQL Statement ignored 30/5 PL/SQL: ORA-00904:

我正在尝试执行一个使用嵌套表的存储过程,但是出现以下错误。我已经检查了传递到集合中的值,它传递了正确数量的值。我做了一个insert查询,它工作得很好,所以我不确定该过程为什么没有执行

LINE/COL ERROR
-------- -----------------------------------------------------------------
28/5     PL/SQL: SQL Statement ignored
30/5     PL/SQL: ORA-00904: "ORDER_ITEMS": invalid identifier
SQL>
理想情况下,我希望在存储过程中使用insert查询来执行此操作,当我执行此查询时,存储过程就会工作

INSERT INTO Orders VALUES (1, 'P396XT47','Test', 'test@test.co.uk', 
    'test', 'test', 'test' ,'DL99 9UU', '123456789', '57.78', '19-apr-2021', order_items(
    order_item(1, 1, 1, 1, '3026143053', '1', 'Brand new', '53.49', '0'),
    order_item(2, 1, 2, 2, '3029608429', '1', 'Brand new', '1.99', '2.00')));

什么是
order\u items\u collection
?如果您实际运行发布的代码,您将得到的实际错误是,
order\u items\u collection
是无效标识符。很抱歉,这是一个输入错误,它应该是
order\u item
我在过程中的insert查询中更改了它,但仍然收到相同的错误。下一个输入错误是表中的列名为
items
insert
语句中的列列表错误地显示了
order\u items
。谢谢@JustinCave,我现在看到它已成功编译。当我遇到错误时,例如
错误的参数数量或类型
您如何调用它,您能给我一个如何执行此存储过程的示例吗?根据错误,我假设您没有传递正确数量或类型的参数。我希望这是一个家庭作业,要求你使用嵌套表。在现实世界中,您确实需要单独的
order
order\u item
表,并且需要单独的创建订单和插入订单项的过程。前段时间您提出了一个问题,与调用同一过程时出现的相同错误有关
CREATE OR REPLACE PROCEDURE insert_new_order
(
    p_order_id IN INT, 
    p_order_num IN CHAR,
    p_name IN CHAR,
    p_email IN CHAR,
    p_address IN VARCHAR2, 
    p_city IN VARCHAR2,
    p_province IN VARCHAR2,
    p_postcode IN VARCHAR2,
    p_telephone IN NUMBER, 
    p_total IN NUMBER,
    p_order_date IN DATE,
    -- Order items
    p_order_item_id IN INT, 
    p_product_id IN INT, 
    p_seller_id IN INT,
    p_sub_order_number IN CHAR, 
    p_quantity IN INT,
    p_condition IN CHAR, 
    p_unit_price IN NUMBER, 
    p_cost_charge IN NUMBER
)
AS
BEGIN
    DBMS_OUTPUT.PUT_LINE ('Insert attempted');

    INSERT INTO Orders (order_id, order_number, billing_name, billing_email, billing_address, billing_city, billing_province, billing_postcode, billing_telephone, billing_total, order_date, order_items)
    VALUES (p_order_id, p_order_num, p_name, p_email, p_address, p_city, p_province, p_postcode, p_telephone, p_total, p_order_date, order_items(
        order_item(p_order_item_id, p_order_id, p_product_id, p_seller_id, p_sub_order_number, p_quantity, p_condition, p_unit_price, p_cost_charge)));

    COMMIT;

    DBMS_OUTPUT.PUT_LINE ('Insert succeeded');

    EXCEPTION
     WHEN others THEN   
        DBMS_OUTPUT.PUT_LINE ('Insert rejected');
      DBMS_OUTPUT.PUT_LINE ('SQL Error Code:  ' || SQLCODE);
      DBMS_OUTPUT.PUT_LINE ('SQL Error Message:  ' || SQLERRM); 
      ROLLBACK;
END;
/
INSERT INTO Orders VALUES (1, 'P396XT47','Test', 'test@test.co.uk', 
    'test', 'test', 'test' ,'DL99 9UU', '123456789', '57.78', '19-apr-2021', order_items(
    order_item(1, 1, 1, 1, '3026143053', '1', 'Brand new', '53.49', '0'),
    order_item(2, 1, 2, 2, '3029608429', '1', 'Brand new', '1.99', '2.00')));