【问题标题】:Insert into nested table plsql插入嵌套表plsql
【发布时间】:2017-09-15 13:08:51
【问题描述】:

我是 pl sql 的新手,我在插入嵌套表时遇到了一些问题(我使用这些只是为了测试一个过程)。 所以我的代码是:

insert into t_prenotazioni
      (nro_cliente, data_disponibilita)
    values
      (righe.nro_cliente, v_data_disponibilita);

其中 t_prenotazioni 是我定义的类型的表,righe.nro_cliente 是我从游标中获得的值,而 v_data_disponibilita 是变量。 我得到的错误是:

PLS-00330 类型名称或子类型的使用无效

【问题讨论】:

  • 您可以插入表格,而不是变量。如果您需要填充一个变量,您需要一个赋值或一些 SELECT ... INTO.. FROM ...请尝试更好地解释您正在尝试做什么以获得一些帮助。
  • 谢谢。我正在尝试声明一个嵌套表,我这样做是这样的:“type prenotazioni is table of type_prenotazioni; t_prenotazioni prenotazioni;”。然后我试图插入到这个表中,表的类型有2个字段。
  • @editLxo 你必须在 PL./SQL 块中使用它
  • 一个简化的test case 显示表的定义和类型在这里会有所帮助。

标签: oracle plsql sql-insert nested-table


【解决方案1】:

您可能正在尝试执行以下操作:

declare
    type type_prenotazioni is record(nro_cliente number, data_disponibilita date);
    type prenotazioni is table of type_prenotazioni;
    vPrenotazioni prenotazioni;
begin
    vPrenotazioni := new prenotazioni();
    vPrenotazioni.extend(1);
    vPrenotazioni(1).nro_cliente := 10;
    vPrenotazioni(1).data_disponibilita := sysdate;
    --
    for i in vPrenotazioni.first .. vPrenotazioni.last loop
        dbms_output.put_line(vPrenotazioni(i).nro_cliente || ' - ' ||
                                to_char(vPrenotazioni(i).data_disponibilita, 'dd/mm/yyyy')
                               );
    end loop;
end;

我强烈建议您查看the Oracle documentation 以提高您的知识;这只是一个简单的小例子,但您可能想做很多不同的事情。

【讨论】:

  • 感谢您的回答。我现在唯一的问题是,当您执行 vPrenotazioni.extend(1) 时,在下一次插入时(因为我在表中插入的不仅是 1 个值,而且是多个值)表中的值会被覆盖吗?
  • 这里我扩展插入单个值;如果您需要插入多条记录,则需要相应地扩展,然后使用 vPrenotazioni(i) 其中 i 是您的号码。或者,您可能想看看 SELECT ... BULK COLLECT INTO ...。看看一些 BULK COLLECT 示例,了解一种大规模填充结构的方法
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-05-01
  • 1970-01-01
  • 2013-05-09
  • 1970-01-01
  • 2019-03-08
  • 1970-01-01
相关资源
最近更新 更多