
[code]

    #!/bin/sh
    
    #変数設定
    export BATCH_E=$(cd $(dir $0)/.. && pwd)
    source $BATCH_E/bin/conf/batch.conf
    
    #バッチ処理種別
    TYPE='25'
    
    #JAVAプログラムの起動
    $SH_COMMAND $BATCH_RUNNER_SH batch.Dataupd $TYPE "$@"
    RESULT=$?
    if [ $GOODSTABLE.reg_dm < to_char(current_timestamp + '-6 months','yyyymmddhh24miss');
     ]; then
        delete
    fi
    exit $?
    
[/code]

目的：一定期間経過した古い履歴情報を一括で削除する処理をシェルに書きたいです。  
条件:現在時刻よりも6か月以前に生成されたものを削除する

csvファイルが毎日1回連携されます。そのcsvファイルはGOODSTABLEテーブルに登録されております。6か月以前に連携されたデータを削除する処理をシェルで実行したいのですが、  
シェルからのGOODSTABLEテーブルへのアクセスの仕方や、シェルからのデータ削除の  
方法が調べても削除方法が見つけられませんでした。シェルでの下記条件を実行の仕方が分からないです。

[code]

    GOODSTABLE.reg_dm < to_char(current_timestamp + '-6 months','yyyymmddhh24miss');
    
[/code]

上記の条件はsqlの値を確認しないといけないとおもうのですが、  
その場合、

[code]

    select * from  GOODSTABLE;
    if [GOODSTABLE.reg_dm < to_char(current_timestamp + '-6 months','yyyymmddhh24miss'); ]
    then
    delete
    fi
    
[/code]

上記のようにsqlにアクセスするような書き方は可能でしょうか？


CC BY-SA 4.0
2021-02-07T10:30:59.310
73846
2021-02-07T11:37:02.133
2021-02-07T11:37:02.133
32774
32774
question
postgresql shellscript
shellの条件式について


`to_char` は恐らく Oracle の関数だと思われますが、これをそのままシェルスクリプトの中から直接呼び出すことはできません。  
あくまで SQL のプログラム自体を呼び出して、その終了ステータスや出力結果を受け取る形になると思います。

例えば Oracle なら SQL*Plus というコマンドをうまく使えば、必要な結果をシェルの変数に格納することができます。

**参考:**  
[[Oracle] SQL*Plusで返ってきた結果をShellの変数に格納](https://shimi-dai.com/store-variable-
sqlplus-for-shell/)

>
[code]

>     #!/bin/sh
>  
>     variable=`sqlplus -s / as sysdba << EOF
>     set head off;
>     select sys_context('USERENV','MODULE') from dual;
>     exit;
>     EOF
>     `
>     echo ${variable}
>  
>     exit 0
>  
[/code]


CC BY-SA 4.0
2021-02-07T11:34:04.603
73848
2021-02-07T11:34:04.603
3060
73846
answer