【问题标题】:check if multiple records exist in table ORACLE PLSQL检查表 ORACLE PLSQL 中是否存在多条记录
【发布时间】:2016-07-30 02:53:41
【问题描述】:

在这里,我想检查记录是否存在,并在此基础上执行操作。 我的代码如下

     FOR cell_configs IN (SELECT cc.cell_configuration_name,
                                 cc.cell_configuration_value
                            from cell_configurations cc
                            where (cc.cell_configuration_name like height_cc or 
                                    cc.cell_configuration_name like width_cc) and
                                  cc.cell_id=c_id)        
    LOOP
      if cc.cell_configuration_name OR
         cc.cell_configuration_value EXISTS
      then
        -- i want to update the table  dbms_output.put_line(temp || ' does exist');
      else
        -- i want to insert records into the table dbms_output.put_line(temp || ' does not exist');
      end if;

      dbms_output.put_line(c_id || ' ' || 
                           cell_configs.cell_configuration_name || ' ' ||  
                           cell_configs.cell_configuration_value );
    END LOOP;  

如果没有找到记录,我可以看到我会得到空字符串,即''。我无法检查它是否为空。

有人可以帮我解决这个问题吗?

编辑(从 cmets 复制的信息):

我正在寻找这 2 行(高度、宽度)cell_configuration_name,例如 'container.dealer-content.configs[1].width' 或 cell_configuration_name,例如 'container.dealer-content.configs[1].height' cell_configuration_value= flex-width-8 cell_configuration_value=flex-width-250

CELL_CONFIGURATIONS 表如下

CELL_CONFIGURATION_ID     NUMBER(38,0) PK
CELL_ID                   NUMBER(38,0) FK
CELL_CONFIGURATION_NAME   VARCHAR2(100 BYTE)
CELL_CONFIGURATION_VALUE  VARCHAR2(4000 BYTE)
IS_LOCKED                 CHAR(1 BYTE)
MODIFIED_BY               VARCHAR2(100 BYTE)
MODIFIED_DATE             DATE
CREATED_BY                VARCHAR2(100 BYTE)
CREATED_DATE 

示例数据如下

CELL_ID     CELL_CONFIGURATION_NAME         CELL_CONFIGURATION_VALUE
37771286880 container.dealer-content.configs[1].height  flex-height-2
37771286880 container.dealer-content.configs[1].width   flex-width-8

【问题讨论】:

  • 您的查询已经只列出了表中存在的记录,因此除非涉及其他表,否则您的逻辑没有意义。请更改您的问题更具体。如果您有另一个表要检查,那么最好的方法是使用所需的键查询另一个表,例如使用 count(*)。如果返回 0,则记录存在,否则为0。
  • 听起来您需要调查 MERGE 语句。
  • 如果没有记录,for循环内的语句不会执行。因此,您尝试做的事情将行不通。
  • 实际上我是根据 2 个值过滤的,即 width_cc 或 height_cc 所以如果只找到宽度,那么我想插入高度,反之亦然。我该怎么做?
  • @cableload 是的。你说的对。如果没有找到记录,我的查询将不会执行。但是如果找到两条记录中的任何一条,那么我的查询将被执行,我需要插入另一条。知道如何检查找到了哪条记录以及我需要插入哪条记录吗?谢谢

标签: oracle plsql exists records


【解决方案1】:

这里是解决方案的开始......

BEGIN
  FOR rec IN
  (SELECT cell_id  -- assuming that cell_id will repeat for lines with width and height
  FROM CELL_CONFIGURATIONS
  WHERE CELL_CONFIGURATION_NAME LIKE height_cc
  MINUS
  SELECT cell_id
  FROM CELL_CONFIGURATIONS
  WHERE CELL_CONFIGURATION_NAME LIKE width_cc
  )
  LOOP
     -- INSERT STATEMENT
  END LOOP;
END;

【讨论】:

  • 在这里,无论记录是否存在,我们都将最终插入。因为如果 height_cc 和 width_cc 都可用,那么我们也会插入。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-02-20
  • 2021-01-23
相关资源
最近更新 更多