0

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

#!/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); )
4

2 回答 2

2

您可以merge为此使用 a,通过 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.

于 2013-08-16T15:25:29.637 回答
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
于 2013-08-16T15:18:57.513 回答