db의 열 중 하나에 특정 값이 들어 있는지 확인해야합니다. 당신이하지 않아도열을 만들지 않으면 열 내의 값이 존재하는지 확인하십시오.
#!/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);)
db의 열 중 하나에 특정 값이 들어 있는지 확인해야합니다. 당신이하지 않아도열을 만들지 않으면 열 내의 값이 존재하는지 확인하십시오.
#!/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);)
당신은, 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
인 경우에도 명시 적으로 명시하는 것이 좋습니다.
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
여기서 '-ge 0'을 사용하면 올바르게 보이지 않습니다. 그 조건은 항상 참이 될 것입니다. (일관되게 이름을 사용 했더라도 - 그것이'count' 또는'model_count'일까요?), 항상 삽입을 할 것입니다. 'count'는 0보다 크거나, 0보다 크거나, null (여러분이 0으로 취급하는)과 같은 이상한 것 또는 오류 메시지의 일부입니다. 그것은 결코 부정적이지 않을 것입니다. 그래서, 아마도'-eq 0'을 테스트하고 싶을 것입니다. 그리고 삽입물에 'VALUES' 키워드가 없습니다. 이 질문을 실제 응답으로 게시했는지 또는 질문의 일부분에 포함시켜야하는지 확실하지 않습니다. –
나는 변화를 만들었지 만, 나는 너의 접근 방식을 따라 갔다. 감사합니다 @AlexPoole – Angelina