Erforderliche Informationen für benutzerdefinierte SQL-Statements

Standardmäßig bietet Ihnen der Connection Manager Standard-SQL-Statements für DB2-, Oracle- und MS SQL Server-Datenquellen.

Wenn Sie eine Custom-Datenquellenkategorie ausgewählt haben, müssen Sie eigene, benutzerdefinierte SQL-Statements eingeben:

  • Im Reiter Tables and columns.

  • In den Reitern Uniqueness und Foreign keys, wenn Sie Ihre Daten auf Constraints, Uniqueness und/oder Referential Integrity testen möchten.

    Wenn Sie das Kontrollkästchen Get uniqueness information und/oder das Kontrollkästchen Get referential integrity information im Bereich General deaktiviert haben, graut der Connection Manager den SQL-Reiter Uniqueness bzw. den Reiter Foreign Keys aus.

Sie können ein Standard-SQL-Statement auch mit einem benutzerdefinierten Statement überschreiben. Informationen darüber, wie Sie SQL-Statements eingeben und überprüfen können, finden Sie hier: siehe Kapitel "SQL-Statements validieren".

Die folgenden Kapitel listen alle Header auf, die für benutzerdefinierte SQL-Statements obligatorisch sind.

Tables and columns

Das SQL-Statement im Reiter Tables and columns muss folgende Informationen enthalten:

Header

Beschreibung

Schema

Name des Schemas

Table

Name der Tabelle

Column

Name der Spalte

Type

Datentyp der Spalte

Length

Länge der Spalte

Scale

Skalierung der Spalte

Nullable

Informationen darüber, ob eine Spalte vom Typ "Nullable" sein kann. Der Wert muss Y oder N sein.

Beispiel

Das folgende Beispiel ist ein mögliches benutzerdefiniertes SQL-Statement für Tables and columns für PostgreSQL 10. Das tatsächliche SQL-Statement hängt von der Art der Abfrage ab, die Sie ausführen möchten.

SELECT   c.table_schema AS "SCHEMA"
             c.table_name   AS "TABLE"
             c.column_name  AS "COLUMN"
             c.data_type    AS "TYPE"
             CASE 
                      WHEN c.character_maximum_length IS NULL THEN c.numeric_precision 
                      ELSE c.character_maximum_length 
                             END as "LENGTH"
             c.numeric_scale AS "SCALE"
             CASE c.is_nullable 
                      WHEN 'YES'THEN 'Y'
                      ELSE 'N'
             END AS "NULLABLE"
    FROM     information_schema.columns c 
    JOIN     information_schema.tables t 
    ON       c.table_schema = t.table_schema 
    AND      c.table_name = t.table_name 
    WHERE    t.table_type = 'BASE TABLE'
    AND      c.table_schema = 'public'
ORDER BY c.table_schema, 
         c.table_name, 
         c.ordinal_position offset 0 rows;

Uniqueness

Das SQL-Statement im Reiter Uniqueness muss die folgenden Informationen enthalten:

Header

Beschreibung

Schema

Name des Schemas

Table

Name der Tabelle

Constraint

Name der Constraint

Column

Name der Spalte

Rule

Informationen zum Typ der Constraint. Zulässige Wert sind:

  • U für Uniqueness-Constraint

  • P für Primärschlüssel-Constraint

Beispiel

Das folgende Beispiel ist ein mögliches benutzerdefiniertes SQL-Statement für Uniqueness für PostgreSQL 10. Das tatsächliche SQL-Statement hängt von der Art der Abfrage ab, die Sie ausführen möchten.

SELECT   c.table_schema    AS "SCHEMA"
         c.table_name      AS "TABLE"
         c.constraint_name AS "CONSTRAINT"
         s.column_name     AS "COLUMN"
         CASE c.constraint_type 
                  WHEN 'UNIQUE' THEN 'U' 
                  ELSE 'P' 
         END as "RULE"
FROM     information_schema.table_constraints c 
JOIN     information_schema.key_column_usage s 
ON       c.constraint_name = s.constraint_name 
WHERE   ( 
                  constraint_type = 'UNIQUE'
         OR       constraint_type = 'PRIMARY KEY'
ORDER BY c.table_schema, 
         c.table_name, 
         c.constraint_name, 
         s.ordinal_position offset 0 rows;

Foreign keys

Das SQL-Statement im Reiter Foreign keys muss die folgenden Informationen enthalten:

Header

Beschreibung

Schema

Name des Schemas

Table

Name der Tabelle

Constraint

Name des Fremdschlüssels

Column

Name der Spalte

ParentSchema

Name des Schemas, auf das der Fremdschlüssel verweist

ParentTable

Name der Tabelle, auf die der Fremdschlüssel verweist

ParentColumn

Name der Spalte, auf die der Fremdschlüssel verweist

Beispiel

Das folgende Beispiel ist ein mögliches benutzerdefiniertes SQL-Statement für Foreign keys für PostgreSQL 10. Das tatsächliche SQL-Statement hängt von der Art der Abfrage ab, die Sie ausführen möchten.

SELECT  t.table_schema as "SCHEMA",
        t.table_name as "TABLE",
        c.column_name as "COLUMN",
        r.constraint_name as "CONSTRAINT",
        k2.table_schema as "PARENTSCHEMA",
        k2.table_name as "PARENTTABLE",
        k2.column_name as "PARENTCOLUMN"       
FROM information_schema.tables t
    LEFT JOIN pg_catalog.pg_description td
        ON (td.objoid = (quote_ident(t.table_schema)||'.'||quote_ident(t.table_name))::regclass AND td.objsubid = 0)
    NATURAL LEFT JOIN information_schema.columns c
        LEFT JOIN(
            information_schema.key_column_usage k
                NATURAL JOIN information_schema.table_constraints n
                NATURAL LEFT JOIN information_schema.referential_constraints r)
        ON c.table_catalog=k.table_catalog
        AND c.table_schema=k.table_schema
        AND c.table_name=k.table_name
        AND c.column_name=k.column_name
    LEFT JOIN information_schema.key_column_usage k2
        ON k.position_in_unique_constraint=k2.ordinal_position
        AND r.unique_constraint_catalog=k2.constraint_catalog
        AND r.unique_constraint_schema=k2.constraint_schema
        AND r.unique_constraint_name=k2.constraint_name
    LEFT JOIN pg_catalog.pg_description cd
        ON (cd.objoid = (quote_ident(t.table_schema)||'.'||quote_ident(t.table_name))::regclass AND cd.objsubid = c.ordinal_position)
WHERE t.TABLE_TYPE='BASE TABLE' AND t.table_schema NOT IN('information_schema','pg_catalog') AND n.constraint_type = 'FOREIGN KEY'
ORDER BY t.table_schema, t.table_name, r.constraint_name, k.ordinal_position;