Posts

Es werden Posts vom Januar, 2019 angezeigt.

Alter Table-Script

Blueprint für Alter Table-Script zum Anfügen einer neuen Spalte: -- *** Spalte COL_AB *** -- Step 1 - Spalte anfügen BEGIN     EXECUTE IMMEDIATE 'ALTER TABLE MY_TBL ADD COL_AB number(1)'; EXCEPTION     WHEN OTHERS THEN         IF sqlcode =-1430 THEN NULL; ELSE RAISE; END IF; END; / -- Step 2 - Spalte auf gewünschten Typ ändern,falls Spalte bereits existierte BEGIN     EXECUTE IMMEDIATE 'ALTER TABLE MY_TBL MODIFY COL_AB number(1)'; EXCEPTION     WHEN OTHERS THEN         IF sqlcode =-1442 THEN NULL; ELSE RAISE; END IF; END; / -- Step 3 - Kommentar COMMENT ON COLUMN MY_TBL.COL_AB IS 'Spalten-Kommentar';

CSV-Export für Excel - UTF8-Problem

Ärgerliches Problem: Beim Erzeugen einer CSV-Datei "von Hand" (z.B. in APEX) wird eine korrekte UTF8-Datei erzeugt - ABER: z.B. Excel erkennt die UTF8-Kodierung nicht und stellt Umlaute etc. falsch dar. Lösung: Durch voranstellen der entsprechenden Byte Order Mark (BOM) läßt sich Excel auf die Sprünge helfen. Konkretes PL/SQL-Beispiel:   v_UTF8_BOM varchar2(10) := CHR(15711167); ...  htp.prn( v_UTF8_BOM||'"Spalte1";"Spalte2"'|| chr(13)    ); ...und schon klappts auch mit Excel Quelle: Gerd Volberg in RedStack Magazin Nr4?-2018

SQL - Referenzen auf eine Tabelle ermitteln

Damit das Einfügen in eine Tabelle der DIRECT LOAD erfolgen kann, dürfen keine Referenzen auf diese Tabelle aktiv sein. Zum prüfen, welche Referenzen es gibt und welchen Status diese haben: -- Tabelle wird referenziert von... Select c1.owner, c1.constraint_name, c1.table_name, c1.r_owner, c1.r_constraint_name, c2.table_name r_table_name,        c1.delete_rule, c1.status, c1.DEFERRABLE, c1.DEFERRED, c1.validated, c2.constraint_type r_constraint_type FROM   sys.ALL_CONSTRAINTS c1, sys.ALL_CONSTRAINTS c2 WHERE  c1.constraint_type = 'R' AND    c2.constraint_type IN ('P', 'U') AND    c2.owner = 'mySchema' AND    c2.table_name = 'myTable' AND    c1.r_owner = c2.owner AND    c1.r_constraint_Name = c2.constraint_name order by 1,3; Zum Abschalten (nicht Löschen!): -- erzeugt SQL zum Abschalten der Referenzen: Select 'alter table '||c1.owner||'.'||c1.table_name||' disable constraint '||c1.constraint_name||';&#

Abfrage, Partitionen ohne Statistiken

Um zu bestimmen, welche Partitionen keine Statistiken haben: select ATP.TABLE_OWNER      , ATP.TABLE_NAME      , ATP.TABLESPACE_NAME      , ATP.COMPRESSION      , ATP.NUM_ROWS      , ATP.LAST_ANALYZED   from  ALL_TAB_PARTITIONS ATP  where ATP.PARTITION_NAME = 'P_5'  order by ATP.LAST_ANALYZED desc nulls first  ; -> fragt alle Tabellen mit gleichem Partitionsnamen ab. select ATP.INDEX_OWNER      , ATP.INDEX_NAME      , ATP.TABLESPACE_NAME      , ATP.COMPRESSION      , ATP.NUM_ROWS      , ATP.LAST_ANALYZED   from ALL_IND_PARTITIONS ATP where ATP.PARTITION_NAME = 'P_5' order by ATP.LAST_ANALYZED desc nulls first ; -> fragt alle Indizes mit gleichem Partitionsnamen ab. Prüfen, ob die Tabellenstatistik älter als die Partitionsstatistik ist: select ATP.TABLE_OWNER      , ATP.TABLE_NAME      , ATP.TABLESPACE_NAME      , ATP.COMPRESSION      , ATP.NUM_ROWS      , ATP.LAST_ANALYZED      , AT.LAST_ANALYZED   from  ALL_TAB_PARTITIONS

Statistiken nur für eine Partition erzeugen

Um Statistiken nur für eine Partition zu erzeugen: exec DBMS_STATS.GATHER_TABLE_STATS (ownname => 'MySchema',tabname => 'MyTab',partname => 'P_5',granularity => 'PARTITION'); Hinweis: Dabei werden ggfs. KEINE globalen Statistiken aktualisier.