web-dev-qa-db-fra.com

Comment exécuter SQL dans un script shell

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
4
Gabe M
#!/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"
5
Gabe M

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.

4
Brian Agnew

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.

0
user7839057
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
0
Mykhaylo Adamovych

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;
0
AloneInTheDark