2014-01-14 2 views
0

SQL * Plus 명령 줄 프로그램 (Oracle)에 내 KornShell (ksh) 스크립트에서 SQL 명령을 전달하려고했지만 내 $MY_VAR 변수가 실패한 것처럼 보입니다. 결의. $MY_VAR은 문자열 값입니다.변수가 PL-SQL 문 안에서 해결되지 않습니다

sqlplus -s <<EOF>> $LOG_FILE 
    $MY_SCHEMA 
    UPDATE my_table SET run_flag = 'I', start_time = to_char(sysdate, 'DD-Mon-YYYY HH24:MI:SS') WHERE (process_id = '$MY_VAR' AND run_flag != 'F'); 
    COMMIT; 
EOF 

내가 할 수있는 성공적으로 $MY_VAR 변수 밖으로 echo, 그래서 나는 변수가 채워 것을 볼 수 있지만, 내가 인수로 제공하고있는 SQL 명령에 변수를 삽입 할 때 해결 될 것 같지 않습니다 SQL * Plus 프로그램에 추가하십시오. 스크립트의 로그 파일은 다음을 출력합니다.

0 개의 행이 업데이트됩니다. 완료했다.

는 SQL은 우리가 성공적으로 ($MY_VAR에 대한 하드 코딩 된 값이기는하지만) SQL Developer의 명령을 실행할 수있는 유효한 것으로 보인다.

내가 여기에없는 것에 대한 아이디어가 있습니까?

+0

아마도 변수 이름 주위에 따옴표를 제거해보십시오. – Mikhail

+0

변수가 문자열 값이고 process_id의 데이터 유형이 CHAR (5)임을 언급하는 것을 잊어 버렸습니다. 작은 따옴표를 제거하면 숫자처럼 취급되지 않으므로 열 유형이 문자열이므로 오류가 발생합니다. 나는 그것에게 시도를 줄 것이다. –

+0

시도해 봤는데 변수 주위에 작은 따옴표를 제거 할 때 같은 오류가 발생했습니다. –

답변

1

이 시도 감사 :

sql="$MY_SCHEMA 
    UPDATE my_table SET run_flag = 'I', start_time = to_char(sysdate, 'DD-Mon-YYYY HH24:MI:SS') WHERE (process_id = '$MY_VAR' AND run_flag != 'F'); 
    COMMIT;" 
print "$sql" 
sqlplus -s <<<"$sql" >> $LOG_FILE 

는 SQL이 올 보입니까? 행이 있고 0 행이 갱신되면, where 절은 0 행을 선택해야합니다.

ksh 버전에 <<< here-string 구문이 없을 수 있습니다. 이 경우 :

print "$sql" | sqlplus -s >> $LOG_FILE