SQL 쿼리의 출력을 변수에 지정


10

Oracle 데이터베이스에 연결하고 쿼리를 실행하고 출력을 변수에 할당하지만 변수 값을 에코하면 올바르게 인쇄되지 않습니다.

count=`sqlplus -s $configuser/$configpass@$ORACLE_SID <<END
           set pagesize 0 feedback off verify off heading off echo off;
           select max(cust_id) from cutomers
           exit;
           END`
           echo $count

쿼리는 데이터베이스에서 실행될 때 올바른 결과를 반환합니다. 그러나 "count"변수의 값이 잘못되었습니다.


1
서식을 수정 한 후 들여 쓰기가 원래 코드와 일치하는지 확인하십시오. (일치하는 경우 잘못된 것입니다. 여기에있는 문서의 종료 구분 기호를 들여 쓰기 할 수 없습니다.)
manatwork

일반 모드에서 무엇이 표시되고 할당 할 때 count의 값은 얼마입니까?
ott--

답변:


13

종료하는 here-doc 단어는 줄의 유일한 문자 여야합니다. 들여 쓰기는 허용되지 않습니다. 또한 $()백틱 대신 사용하십시오 -중첩 가능합니다.

count=$(sqlplus -s $configuser/$configpass@$ORACLE_SID <<END
       set pagesize 0 feedback off verify off heading off echo off;
       select max(cust_id) from cutomers
       exit;
END
)
echo $count

http://www.gnu.org/software/bash/manual/bashref.html#Here-Documents


2
<<-END표기법 과 함께 탭을 사용할 수도 있습니다 . 공백이 아닌 TABS!
slm

1
OUTPUT=$( ${OracleClientHome}/sqlplus -S user/pass@database <<EOF
set pagesize 0 linesize 32767 feedback off verify off heading off echo off
select a1.id  || '|' ||
       a1.stmt_begin_date  || '|' ||
       a1.stmt_end_date  || '|' ||
       a1.status  || '|' ||
       a1.total_recs 
from acct_stmt_file a1
 where a1.actp_cd = 'HSA'
   and a1.stmt_begin_date =trunc(sysdate);
exit;
EOF
)

echo -e "\n${OUTPUT}"

1
왜? 이 스크립트 스 니펫뿐만 아니라 커뮤니티와 아이디어를 공유하면 더 좋을 것이라고 생각합니다.
peterh-복원 모니카

-1
count=`sqlplus -s $configuser/$configpass@$ORACLE_SID <<END
           set pagesize 0 feedback off verify off heading off echo off
           select max(cust_id) from cutomers;
           exit;
           END`

           echo $count

올바른 위치에 세미콜론을 사용해야합니다.


또한 END끝에 공백이 없어야합니다.
Kusalananda
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.