* 질문 등록 시 다음의 내용을 꼭 기입하여 주세요.
|
CentOS 7.9 |
|
10.2 |
|
|
|
* CUBRID 응용 오류, SQL 오류 또는 SQL 튜닝 관련된 문의는 반드시 다음의 내용을 추가해 주세요. 비밀글이나 비밀 댓글도 가능합니다.
* 저희가 상황을 이해하고, 재현이 가능해야 알 수 있는 문제들이 많습니다. 가능한 정보/정황들을 부탁합니다.
에러 내용 및 재현 방법 | 재현 가능한 Source와 SQL |
관련 테이블(인덱스, 키정보 포함) 정보 | CUBRID 홈 디렉토리 아래 log 디렉토리 압축 |
-------------- 아래에 질문 사항을 기입해 주세요. ------------------------------------------------------------------------
정기적으로 쿼리 결과를 텍스트 파일로 추출할 일이 있어,
크론탭에 등록하기 위해 아래와 같이 테스트하고 있습니다.
csql -u ID -p PW DB명@호스트명 -i test.sql -o outfile
콘솔에서 넘겨준 변수를 출력할 수 있는지 확인하기 위해
test.sql의 내용은 아래와 같습니다.
SELECT ?;
이 상태에서 어떻게 sql파일로 변수를 전달할 수 있을까요?
1. csql -u ID -p PW DB명@호스트명 -i test.sql 변수 -o outfile
2. csql -u ID -p PW DB명@호스트명 -i 'test.sql 변수' -o outfile
이런식으로 시도해 보았으나
1의 경우 변수 부분이 필요하지 않다고 나오고
2의 경우는 'test.sql 변수'를 파일이름으로 인식해서 그런 파일이나 디렉토리가 없다는 에러가 나옵니다.
사용자가 인자 값을 입력해 질의를 수행하고 싶으신 경우, 쉘 스크립트를 작성해 실행하는 방법이 있습니다.
예)
$ cat test.sh
#!/bin/bash
val=$1
csql -u dba -p 패스워드 demodb@localhost -c "select $val" -o /home/cubrid/20221129/outfile.txt
$ sh test.sh 1
$ cat /home/cubrid/20221129/outfile.txt
=== <Result of SELECT Command in Line 1> ===
1
=============
1
1 row selected. (0.000392 sec) Committed. (0.000004 sec)
* 추가로 csql -o 옵션을 이용할 경우, outfile.txt을 덮어씌워 이전 수행 결과가 사라집니다.
* 이전 수행 결과를 같이 보관하고 싶을 경우 csql -o 옵션 대신 쉘 명령어인 >> 을 사용 하시면 됩니다.
AS-IS : csql -u dba demodb -c "select $val" -o /home/cubrid/20221129/outfile.txt
TO-BE : csql -u dba demodb -c "select $val" >> /home/cubrid/20221129/outfile.txt