Comment exécutez-vous une commande SQL dans un script Shell lors de la définition d'une variable? J'avais essayé cette méthode et il n'exécute pas la commande, il pense que la commande est juste une chaîne.
#!/bin/ksh
variable1=`sqlplus -s username/pw@Oracle_instance <<EOF
SET PAGESIZE 0 FEEDBACK OFF VERIFY OFF HEADING OFF ECHO OFF
select count(*) from table;
EXIT;
EOF`
if [ -z "$variable1" ]; then
echo "No rows returned from database"
exit 0
else
echo $variable1
fi
#!/bin/ksh
variable1=$(
echo "set feed off
set pages 0
select count(*) from table;
exit
" | sqlplus -s username/password@Oracle_instance
)
echo "found count = $variable1"
Vous pouvez utiliser un heredoc . par exemple. à partir d'une invite:
$ sqlplus -s username/password@Oracle_instance <<EOF
set feed off
set pages 0
select count(*) from table;
exit
EOF
alors sqlplus
consommera tout jusqu'au marqueur EOF
en tant que stdin.
Code
PL_CONNECT_STRING="$DB_USERNAME/$DB_PASSWORD@$DB_SERVICE"
OUTPUT=$(sqlplus -s $PL_CONNECT_STRING <<-END-OF-SQL
select count(*) from table;
exit;
END-OF-SQL)
echo "COMPLETED GATHER STATS $OUTPUT";
Explication:
PL_CONNECT_STRING
transporter le nom d'utilisateur, le mot de passe et le nom du service
sqlplus est utilisé pour connecter la base de données avec les détails PL_CONNECT_STRING
La balise END-OF-SQL
contient la requête que vous voulez exécuter
echo
est utilisé pour imprimer le résultat de la requête
REMARQUE: Vous pouvez attribuer plusieurs requêtes à l’intérieur de la balise END-OF-SQL
, ce qui est également utile pour l’exécution par lots.
sqlplus -s /nolog <<EOF
whenever sqlerror exit sql.sqlcode;
set echo on;
set serveroutput on;
connect <SCHEMA>/<PASS>@<Host>:<PORT>/<SID>;
truncate table tmp;
exit;
EOF
Il est peut-être trop tard pour répondre, mais il existe un code fonctionnel:
sqlplus -s "/ as sysdba" << EOF
SET HEADING OFF
SET FEEDBACK OFF
SET LINESIZE 3800
SET TRIMSPOOL ON
SET TERMOUT OFF
SET SPACE 0
SET PAGESIZE 0
select (select instance_name from v\$instance) as DB_NAME,
file_name
from dba_data_files
order by 2;