[NEWSboard IBMi Forum]
  1. #1
    Registriert seit
    Jun 2005
    Beiträge
    16

    SQL Vorgaben setzen: DateFmt, DecEdit etc..

    Hallo liebe i-series Gemeinde,

    ich habe ein Problem und hoffe, daß mir jemand helfen kann.
    In einem der letzten IBM Newsletter war ein schickes bash-shell script, welches als Ersatz für CPYTOIMPF dienen kann.

    Das Script ermittelt aus SYSCOLUMNS die Feldnamen und Attribute einer Datei.
    Anschließend werden die Feldnamen mit Feldtrenner , z.B. ";" zusammengekettet und es wird ein entsprechender Select Befehl abgesetzt.
    Wenn man das dann umleitet "> /home/huber/myfile.csv
    dann hat man die gewünschte Ausgabe.

    Meine Frage: Wie kann ich bestimmte Dinge vorgeben, wie beispielsweise das Datumsformat, oder das Dezimalzeichen ?

    In einer interaktiven SQL Sitzung kann man das mittels F13 mühelos einstellen. Der CPYTOIMPF gibt das als Parameter mit.

    Ich habe mich für diese Vorgehensweise entschieden, weil der CPYTOIMPF je nach Release ganz unterschiedlich arbeitet.

    Vielen Dank für alle Antworten schon mal vorab !

    Gruß
    Karl

  2. #2
    Registriert seit
    Feb 2001
    Beiträge
    20.696
    Ich denke mal, das Shellscript muss auch entsprechende SQL SET OPTION verwenden, ansonsten gilt das aktuelle Jobformat.
    Ggf. kann man in der Verbindungszeichenfolge für Connect entsprechende Parameter einstellen, hierzu müsste man mal das Script sehen können.
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

  3. #3
    Registriert seit
    Jun 2005
    Beiträge
    16
    Hallo Fuerchau,

    wie wären denn die entsprechenden "Set Options" ?

    Hier das shell script von Scott Klement:

    #!/usr/bin/qsh

    LIB=$1
    FILE=$2
    FIELDLIST=

    get_fields() {
    db2 "select '!'||sys_cname||' '||coltype from qsys2.syscolumns \
    where sys_dname='$LIB' and sys_tname='$FILE'" \
    | grep '^!' \
    | cut -b 2-
    }

    build_field_list() {

    FIELDLIST="'!'"

    while read field type; do

    case "$type" in
    CHAR)
    QUOTE=Y
    ;;
    WCHAR)
    QUOTE=Y
    ;;
    VARCHAR)
    QUOTE=Y
    ;;
    *)
    QUOTE=N
    ;;
    esac

    if [ "$QUOTE" = "Y" ]; then
    FIELDLIST="${FIELDLIST}||','||'\"'||trim($field)||'\"'"
    else
    FIELDLIST="${FIELDLIST}||','||trim(char($field))"
    fi

    done
    }

    make_csv() {
    RUNSQL="select ${FIELDLIST} from ${LIB}.${FILE}"
    echo $RUNSQL
    db2 "$RUNSQL" \
    | grep "^!" \
    | cut -b 3-
    }

    get_fields | build_field_list
    make_csv

    Das funktioniert - je nach Release - tadellos.
    Wenn man das SQL Verhalten durch CHGJOB steuern kann, wäre es ja einfach.
    Ein setzen der SQL Optionen wäre mir allerdings sympathischer.
    Ich weiß nur nicht, wie die Anweisungen lauten.

    Danke vorab

    Karl

    P.S.: Das Script funktioniert so nicht !

    Das ist zwar tadelloses Unix bash script, aber auf i-series wird z.B. das "^" nicht richtig interpretiert, das ja ein "beginnend mit" Muster auswerten soll. Ich vermute mal ein Zeichensatz Thema.

    P.P.S: Unter V5/R1 funktioniert das nur bei Dateien mit wenigen Feldern.
    Ich vermute mal ein Restriktion in der Parametergröße, da sich der Abfragestring ziemlich aufbläht, wenn man eine Datei mit vielen Feldern hat.
    Unter V5/R3 läuft das wie ein Glöckchen, bei V5/R1 ist die $Fieldlist = *BLANK, wenn die Datei viele Felder hat.

  4. #4
    Registriert seit
    Feb 2001
    Beiträge
    20.696
    Irgendwo muss ja noch ein Connect stecken, da solche Scripts meist CLI verwenden.
    Im Connect können dann die Parameter gesetzt werden.
    Ggf. sind auch SetStatementAttribute, SetConnectionAttribute o.ä. erforderlich.

    Das Dezimalformat wird automatisch aus dem Job genommen, das Datumformat kann man ggf. auch casten (Feldtyp halt ermitteln):

    ... char(mydate, ISO) ...
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

  5. #5
    Registriert seit
    Jun 2005
    Beiträge
    16
    @Fuerchau,

    nein, da gibts keinen Connect. Jedenfalls keinen, der von meiner Seite aus explizit angegeben wird.

    Das script wir schlicht als qsh command abgesetzt, bzw interaktiv in einer shell aufgerufen.

    Der Connect versteckt sich vermutlich implizit hier:
    "db2 "$RUNSQL"

    Aber ich weiß immer noch nicht, mit welchem SQL Befehl ich jetzt Einfluß auf das Verhalten nehmen könnte.

    Wie würde z.B. "SetConnectionAttribute" kodiert werden ?

    Gruß
    Karl

  6. #6
    Registriert seit
    Feb 2001
    Beiträge
    20.696
    Tja, da muss ich passen.
    Vielleicht gibts ja eine Beschreibung zum db2-Objekt ?
    Da kann man sicherlich noch Einstellungen vornehmen.
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

Similar Threads

  1. Antworten: 11
    Letzter Beitrag: 18-07-16, 09:49
  2. RPGLE - SQL
    By christian_lettner in forum NEWSboard Programmierung
    Antworten: 2
    Letzter Beitrag: 16-11-06, 10:15
  3. SQL - Cursor vernichten ?!?
    By FNeurieser in forum NEWSboard Programmierung
    Antworten: 3
    Letzter Beitrag: 11-10-06, 14:53
  4. SQL - Fehler
    By Kaufmann in forum IBM i Hauptforum
    Antworten: 11
    Letzter Beitrag: 28-06-06, 14:11
  5. SQL .. for update of (RPG embedded SQL)
    By loeweadolf in forum NEWSboard Programmierung
    Antworten: 2
    Letzter Beitrag: 01-06-06, 09:43

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • You may not post attachments
  • You may not edit your posts
  •