【发布时间】: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