检查列中的值是否存在,如果不是,则创建列

时间:2013-08-16 15:07:51

标签: shell oracle11g

我需要检查我的数据库中的一列是否包含特定值。如果不是,我想用以下值创建该行:

#!/bin/bash
#
MODEL=$1

if true (SELECT * FROM table.STATISTICS
         WHERE MODEL = '$MODEL' )

do this (INSERT INTO table.STATISTICS('$MODEL',0,SYSDATE,0,SYSDATE,0); )

2 个答案:

答案 0 :(得分:2)

您可以使用merge,将SQL * Plus作为'heredoc'运行,这样您就不必进行单独的计数操作; merge会有效地为您做到这一点:

#!/bin/bash

MODEL=$1

sqlplus -s /nolog <<!EOF

connect user/pass

merge into statistics s
using (select '${MODEL}' as model, 0 as num1, sysdate as date1,
  0 as num2, sysdate as date2 from dual) t
on (s.model = t.model)
when not matched then
insert (s.model, s.num1, s.date1, s.num2, s.date2)
values (t.model, t.num1, t.date1, t.num2, t.date2);

!EOF

但显然使用真实的列名。最好明确列出它们,即使是普通的insert

答案 1 :(得分:0)

get_count () {
    sqlplus -s username/pass <<!
    set heading off
    set feedback off
    set pages 0
    select count(model) from statistics
    where model='$MODEL';
!
}

count=$(get_count $1)

if [ "${count:-0}" -eq 0 ]; then
    echo "its zero"

    sqlplus -S username/pass << EOF
    whenever sqlerror exit 1;
    set echo on
    set verify off
        INSERT INTO table.STATISTICS VALUES('$MODEL',0,SYSDATE,0,SYSDATE,0); 
    exit;
    EOF

fi