2017-09-19 1 views
0

Versuch, einer Variablen im Shell-Skript die Ausgabe der SQL-Abfrage für ein Objekt zuzuweisen, das Sonderzeichen enthält.Escaping-Sonderzeichen bei SQL-Ausgabe an Variable im Shell-Skript

Lauf direkt auf der Datenbank:

db2 -x 'select count(*) from <SCHEMA>."/BIC/TEST"' 

     11000 

Doch wenn ich das in Skript enthalten muss ich doppelte Anführungszeichen verwenden, wie ich Variablen in die SQL-geben verwende. Einfache Anführungsstriche

Output=$(db2 -x 'select count(*) from ${_SCHEMA}."/BIC/TEST"') 

echo -e "$Output" 

Ergebnisse in:

SQL20521N Error occurred processing a conditional compilation directive near 
"_". Reason code="7". SQLSTATE=428HV 

Wenn ich doppelte Anführungszeichen verwende ich getroffen:

SQL0104N ein unerwartetes Token " '/ BIC/TEST'" wurde nach „ount gefunden (*)

versucht, die doppelten Anführungszeichen mit einem anderen Satz von doppelten Anführungszeichen zu entkommen:

d b2 -x 'Wählen Sie Anzahl (*) von $ {_ SCHEMA}. ""/BIC/TEST ""'

Aber das scheint nicht im Skript zu funktionieren. Es funktioniert für Tabellen, bei denen keine Sonderzeichen/Anforderungen in Angeboten enthalten sind.

Jede Hilfe wird geschätzt.

+0

Bearbeiten Sie Ihre Frage hinzufügen, welche Shell Sie verwenden (bash, ksh etc.) – mao

+0

ich versucht habe, in sh & Bash – dgodson

Antwort

0

Der Code unten funktioniert gut für mich, beachten Sie die gefliesten Anführungszeichen. Wenn dies fehlschlägt, müssen Sie weitere Details zu Ihrer DB2-Version und der DB2-Server-Betriebssystemplattform angeben.

#!/bin/ksh 

db2 connect to sample 
(($? > 0)) && print "Failed to connect to database" && exit 1 

db2 -o- "drop table \"/bin/test\" " 

db2 -v "create table \"/bin/test\"(a integer)" 
(($? > 0)) && print "Create table failed" && exit 1 

db2 -v "insert into \"/bin/test\"(a) values(1),(2),(3),(4)" 
(($? > 0)) && print "insert rows failed" && exit 1 

db2 -v describe table \"/bin/test\" 

typeset -i count_rows=$(db2 -x "select count(*) from \"/bin/test\"") 
(($? > 0)) && print "query count rows failed" && exit 1 

print "\nRow count is: ${count_rows}\n" 

db2 -o- connect reset 
+0

Perfect, Dank. Arbeitete einen Charme. – dgodson

Verwandte Themen