2013-08-16 2 views

답변

2

당신은, SQL의 *을 통해 플러스 '히어 닥'으로 실행이에 대한 merge을 사용할 수 있습니다 : 그것은 내가 folowing 값으로 해당 행을 만들려하지 않는 경우 별도의 카운트 작업을 수행합니다. 분명히,

#!/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 

그러나 실제 열 이름을 사용 : merge 효과적으로 당신을 위해 그렇게 할 것입니다. 보통 insert 인 경우에도 명시 적으로 명시하는 것이 좋습니다.

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 
+1

여기서 '-ge 0'을 사용하면 올바르게 보이지 않습니다. 그 조건은 항상 참이 될 것입니다. (일관되게 이름을 사용 했더라도 - 그것이'count' 또는'model_count'일까요?), 항상 삽입을 할 것입니다. 'count'는 0보다 크거나, 0보다 크거나, null (여러분이 0으로 취급하는)과 같은 이상한 것 또는 오류 메시지의 일부입니다. 그것은 결코 부정적이지 않을 것입니다. 그래서, 아마도'-eq 0'을 테스트하고 싶을 것입니다. 그리고 삽입물에 'VALUES' 키워드가 없습니다. 이 질문을 실제 응답으로 게시했는지 또는 질문의 일부분에 포함시켜야하는지 확실하지 않습니다. –

+0

나는 변화를 만들었지 만, 나는 너의 접근 방식을 따라 갔다. 감사합니다 @AlexPoole – Angelina

관련 문제