【问题标题】:Insert and delete in oracle 11g procedureoracle 11g程序中的插入和删除
【发布时间】:2013-12-15 08:05:03
【问题描述】:

我需要使用 groupid 和 item ids(array) 等输入参数编写一个过程 我需要使用值(groupid,itemid [0])将所有项目(1,11),(1,12),(1,13)等插入到表中。我有两列(groupid,itemid)的表。请帮我解决这个问题。我正在尝试编写合并但出现错误

创建或替换过程 update_product_group_prc ( in_product_group_key IN INT,
in_product_key_array IN dbms_utility.maxname_array ) 作为 indx pls_integer := in_product_key_array.FIRST; 开始

WHILE(索引不为空) 循环

  MERGE INTO   DIM_PRODUCT_X_GROUP PXG
  USING(SELECT IN_PRODUCT_GROUP_KEY ,
               IN_PRODUCT_KEY_ARRAY(INDX)  IN_PRODUCT_KEY_ARRAY
        FROM DUAL) IN_TBL
  ON(IN_TBL.IN_PRODUCT_GROUP_KEY=PXG.PRODUCT_GROUP_KEY)
  WHEN MATCHED THEN

   -- DELETE --need to delete source records which r not here in array.
   -- WHERE 
  WHEN NOT MATCHED THEN
    INSERT (PRODUCT_GROUP_KEY,PRODUCT_KEY)
    VALUES (IN_TBL.IN_PRODUCT_GROUP_KEY,IN_TBL.IN_PRODUCT_KEY_ARRAY);`

INDX := IN_PRODUCT_KEY_ARRAY.NEXT(INDX); 结束循环;

END update_product_group_prc;

错误(16,41):PL/SQL:ORA-00936:缺少表达式

【问题讨论】:

  • 该块有点奇怪,您循环了INDX,但循环中没有使用该值。因此,您多次完全执行相同的语句。你所在街区的第 16 行是哪一行?
  • 您在 VALUES 子句中缺少 INDEX:认为是这样的:VALUES (IN_TBL.IN_PRODUCT_GROUP_KEY,IN_TBL.IN_PRODUCT_KEY_ARRAY(INDEX));
  • 请看一下程序。我对 oracle 很陌生。我希望我的要求你得到它也请提供任何其他解决方案。我无法创建临时表并且在插入值时抛出循环,找不到对象。执行我的任务只是一个想法。

标签: plsql oracle11g


【解决方案1】:

您有语法错误。评论“WHEN MATCHED THEN”片段。 http://docs.oracle.com/cd/B28359_01/server.111/b28286/statements_9016.htm#SQLRF55028

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-27
    • 1970-01-01
    相关资源
    最近更新 更多