bash 스크립트 내에서 SQL을 어떻게 실행합니까?
자동화하려는 SQL 스크립트가 몇 개 있습니다.이전에는 SQL*Plus를 사용했으며 bash 스크립트에서 sqlplus 바이너리를 수동으로 호출했습니다.
하지만 DB에 접속해서 bash 스크립트 안에서 스크립트를 호출할 수 있는 방법이 있는지 알아보고 있습니다.내가 삽입할 수 있습니다.date쿼리를 과거의 특정 일 수와 비교하여 실행하도록 합니다.
저는 약간 혼란스럽습니다.bash 스크립트 내에서 sqlplus를 호출할 수 있어야 합니다.이것이 당신이 당신의 첫번째 진술로 하고 있던 것일 수도 있습니다.
bash 스크립트 내에서 다음을 실행해 보십시오.
#!/bin/bash
echo Start Executing SQL commands
sqlplus <user>/<password> @file-with-sql-1.sql
sqlplus <user>/<password> @file-with-sql-2.sql
스크립트에 데이터를 전달하려면 SQL Plus를 통해 인수를 스크립트에 전달하면 됩니다.
파일-with-sql-1.sql의 내용
select * from users where username='&1';
그런 다음 값을 전달하는 sqlplus를 호출하도록 bash 스크립트를 변경합니다.
#!/bin/bash
MY_USER=bob
sqlplus <user>/<password> @file-with-sql-1.sql $MY_USER
또한 "여기 문서"를 사용하여 동일한 작업을 수행할 수 있습니다.
VARIABLE=SOMEVALUE
sqlplus connectioninfo << HERE
start file1.sql
start file2.sql $VARIABLE
quit
HERE
다음은 bash 셸에서 MySQL 쿼리를 실행하는 간단한 방법입니다.
mysql -u [database_username] -p [database_password] -D [database_name] -e "SELECT * FROM [table_name]"
SQL 쿼리를 sqlplus에 파이프로 연결할 수 있습니다.mysql에서 작동합니다.
echo "SELECT * FROM table" | mysql --user=username database
나는 소스포지에서 jdbcsql 프로젝트를 사용했습니다.
*nix 시스템에서 표준화할 결과의 CSV 스트림이 생성됩니다.
java -Djava.security.egd=file///dev/urandom -jar jdbcsql.jar -d oracledb_SID -h $host -p 1521 -U some_username -m oracle -P "$PW" -f excel -s "," "$1"
참고로 다음을 추가합니다.-Djava.security.egd=file///dev/urandom성능을 크게 향상시킵니다.
Windows 명령은 유사합니다. http://jdbcsql.sourceforge.net/ 을 참조:
설치하지 않으려는 경우sqlplus서버/컴퓨터에서 다음 명령줄 도구를 사용하면 친구가 될 수 있습니다.이 도구를 실행하기 위해 필요한 것은 Java 8뿐인 간단한 Java 응용프로그램입니다.
이 도구를 사용하여 Linux bash 또는 윈도우즈 명령줄에서 SQL을 실행할 수 있습니다.
예:
java -jar sql-runner-0.2.0-with-dependencies.jar \
-j jdbc:oracle:thin:@//oracle-db:1521/ORCLPDB1.localdomain \
-U "SYS as SYSDBA" \
-P Oradoc_db1 \
"select 1 from dual"
설명서는 여기에 있습니다.
여기에서 이진 파일을 다운로드할 수 있습니다.
Bash에는 기본 제공 SQL 데이터베이스 연결이 없으므로...일종의 타사 도구를 사용해야 합니다.
언급URL : https://stackoverflow.com/questions/1467846/how-do-you-execute-sql-from-within-a-bash-script
'programing' 카테고리의 다른 글
| "ES5가 아닌 클래스에서 getInternalNameOfClass()를 호출하는 동안 오류가 발생했습니다. AngularFireModule에 내부 클래스 선언이 있어야 합니다." (0) | 2023.07.03 |
|---|---|
| 서로 다른 두 파일 간의 git diff (0) | 2023.07.03 |
| 개체를 데이터 및 응용 프로그램/x-www-form-url 인코딩된 콘텐츠 유형으로 RestTemplate를 사용하시겠습니까? (0) | 2023.06.28 |
| OnAction에서 컨트롤러 및 작업 이름을 가져오는 방법실행 중? (0) | 2023.06.28 |
| 단일 파일의 기록에서 문자열 검색 (0) | 2023.06.28 |