셸 스크립트: Oracle DB에 로그인하고 데이터를 변수로 가져옵니다.

셸 스크립트: Oracle DB에 로그인하고 데이터를 변수로 가져옵니다.

oracle 데이터베이스에 로그인하고 테이블에서 선택하여 결과를 다른 변수에 저장하는 쉘 스크립트가 있습니다.

Username=User1
Password=Pass1
eval DatabaseName=db_tst

var1 = 1

Result=`sqlplus -silent $Username/$Password@$DatabaseName <<EOF 
whenever sqlerror exit sql.sqlcode
SET PAGESIZE 0 FEEDBACK OFF VERIFY OFF HEADING OFF ECHO OFF 
select to_char(RUN_DATE,'YYYY-MM-DD:hh24:mi:ss') from table1 where col1 = $var1;
EXIT;
EOF`

echo $Result

문제는 "result"($Username, $Password...등)에 전달된 변수에 인식할 수 없는 값이 있다는 것입니다. 이 정보는 나에게 다음과 같은 정보를 제공합니다.

ERROR: ORA-01017: invalid username/password; logon denied SP2-0306: Invalid option. Usage: CONN[ECT] [{logon|/|proxy} [AS {SYSDBA|SYSOPER|SYSASM}] [edition=value]] where <logon> ::= <username>[/<password>][@<connect_identifier>] <proxy> ::= <proxyuser>[<username>][/<password>][@<connect_identifier>] SP2-0306: Invalid option. Usage: CONN[ECT] [{logon|/|proxy} [AS {SYSDBA|SYSOPER|SYSASM}] [edition=value]] where <logon> ::= <username>[/<password>][@<connect_identifier>] <proxy> ::= <proxyuser>[<username>][/<password>][@<connect_identifier>] SP2-0157: unable to CONNECT to ORACLE after 3 attempts, exiting SQL*Plus

오류: SQL Plus 명령이 실패했습니다.

해당 값을 수동으로 쓰면 로그인되고 Result 변수가 필요한 값을 얻습니다. 하지만 값을 수동으로 쓰고 싶지는 않습니다. 변수를 통해 전달해야 합니다.

답변1

이 시도...

Result=`sqlplus -silent ${Username}/${Password}@$DatabaseName <<EOF 
whenever sqlerror exit sql.sqlcode
SET PAGESIZE 0 FEEDBACK OFF VERIFY OFF HEADING OFF ECHO OFF 
select to_char(RUN_DATE,'YYYY-MM-DD:hh24:mi:ss') from table1 where col1 = ${var1};
EXIT;
EOF`

Result=$(sqlplus -silent ${Username}/${Password}@$DatabaseName <<EOF 
whenever sqlerror exit sql.sqlcode
SET PAGESIZE 0 FEEDBACK OFF VERIFY OFF HEADING OFF ECHO OFF 
select to_char(RUN_DATE,'YYYY-MM-DD:hh24:mi:ss') from table1 where col1 = ${var1};
EXIT;
EOF)

관련 정보