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:
|
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;