2017-08-22 3 views
0

テーブルをロードする前に、入力ファイルの可用性に基づいて既存のテーブルを切り捨てたいので、フラットテキストファイルからテーブルをロードするスクリプトがあります。 入力ファイルがある場合は、テーブルを切り捨て、新しいデータをファイルからテーブルにロードします。切り捨てながら は、だから私は、入力ファイルが存在しているかどうかを確認したいので、私のようなコードを書いた:入力のBEGIN ENDステートメントにif-else条件を追加する方法SQL PLUSへのクエリー

truncateTables() 
{ 
QUERY_TO_TRUNCATE_TABLES="ALTER SESSION ENABLE PARALLEL DML; 
        whenever sqlerror exit sql.sqlcode; 
BEGIN 
     if [$IsFile1 == 'TRUE'] 
     then 
     EXECUTE IMMEDIATE 'DELETE /*+ parallel(A,8) */ FROM TableName1 A'; 
     else 
     echo "no input file" 
     fi; 
     if [$IsFile2 == "TRUE"] 
     then 
     EXECUTE IMMEDIATE 'DELETE /*+ parallel(B,8) */ FROM TableName2 B'; 
     else 
     echo "No input file" 
     fi; 
     COMMIT; 
END; 
    /
     "; 

     EXECUTE_TO_TRUNCATE_TABLES=`sqlplus -s $DB_CONN_STR << EOF 
          SET serverout on feed off heading off tab off serverout on pagesize 0 trimspool on linesize 1000 
          whenever sqlerror exit sql.sqlcode; 
          ${QUERY_TO_TRUNCATE_TABLES}; 
          EXIT; 
          EOF` 
    retVal=$? 
    errorORA=`echo "${EXECUTE_TO_TRUNCATE_TABLES}" | grep -i 'ORA' | wc -l` 
    errorSP=`echo "${EXECUTE_TO_TRUNCATE_TABLES}" | grep -i 'SP' | wc -l` 

    if [[ $retVal -ne 0 || ${errorORA} -ge 1 || ${errorSP} -ge 1 ]] 
      then 
      echo "Exiting with failure.......\n$retVal\n........" 
      echo "Delete tables FAIL." 
    else 
      echo "tables Delete is Successful" 
    fi 
    } 

しかし、他の条件が間に開始と終了ならば、我々が使用できないようですか?私はこのコードをSQL PLUSに渡すことができるように、このコードをどのように変更できますか?他の方法でも大丈夫です。

+1

を助け間BEGINとQUERY_TO_TRUNCATE_TABLESのENDということでしょうか? Oracleが理解できる言語であるPL/SQLではありません。 –

+1

mysqlタグが選択されているのはなぜですか? – Noob

+0

BEGIN ENDブロックにはPL/SQLコードが含まれています。 –

答えて

0

実際にPLSQLコードとkshが混在しています。

あなたのkornshellからの条件でクエリを構築することは可能です。ここでは、起動する方法を次のとおりです。

truncateTables() 
{ 
     QUERY_TO_TRUNCATE_TABLES="ALTER SESSION ENABLE PARALLEL DML; 
        whenever sqlerror exit sql.sqlcode; 
     BEGIN 
"; 

    if [ "$IsFile1" == "TRUE" ] 
    then 
     QUERY_TO_TRUNCATE_TABLES=${QUERY_TO_TRUNCATE_TABLES}" 
     EXECUTE IMMEDIATE 'DELETE /*+ parallel(A,8) */ FROM TableName1 A'; 
;" 
    else 
     echo "no input file 1" 
    fi 

    if [ "$IsFile2" == "TRUE" ] 
    then 
     QUERY_TO_TRUNCATE_TABLES=${QUERY_TO_TRUNCATE_TABLES}" 
     EXECUTE IMMEDIATE 'DELETE /*+ parallel(B,8) */ FROM TableName2 B'; 
"; 
    else 
     echo "No input file 2" 
    fi 

    QUERY_TO_TRUNCATE_TABLES=${QUERY_TO_TRUNCATE_TABLES}" 
       COMMIT; 
     END; 
/
"; 

希望これはどのような言語

関連する問題