(ORACLE / SQL)插入时

时间:2015-05-02 09:46:18

标签: sql oracle

示例如下:

Declare
stringtest VARCHAR2(10):='yes';
Begin
INSERT WHEN (condition) THEN   -- the condition has to be like stringtest='yes';
INTO ...
Select ...
End;

但我不能像

那样做
Begin
INSERT WHEN TRUE THEN
INTO ...
Select ...
End;

让条件成真的最简单方法是什么?

2 个答案:

答案 0 :(得分:1)

最简单(和最正确)的方法是将条件移动到select'where'子句中。如果select没有返回(选择),则不会插入任何内容。 即。

insert into table(col1,col2)
select 'colval1', 'colval2'
from dual
where 2=3

将不选择任何内容并且不插入任何内容

答案 1 :(得分:1)

Oracle SQL(与PL / SQL相对)没有布尔类型,因此在SQL语句中无法识别TRUE(独立,或者恰好位于PL / SQL块中) )。

您可以使用始终计算结果为true的虚拟表达式,例如:

INSERT WHEN (1=1) THEN
INTO ...
Select ...

Quick SQL Fiddle demo

除非这是一个更大的INSERT ALL结构的“固定”部分,否则该条款似乎相当多余,如果你知道它总是必须是真的;如果你没有评估真实的东西,WHEN子句不会添加任何有用的东西。如果您想将它用作控制行为的标志,那么您的stringtest方法可能会更容易,因为您可以在一个地方更改该设置 - 在声明部分 - 而不是搜索并更改所有个人{ {1}}条款。