2017-12-01 4 views
0

Ich muss eine Oracle-Datenbanktabelle abfragen und den Datentyp einer Spalte überprüfen. Ich habe das folgende Skript erreicht, aber TYPE_NAME wird nicht erkannt. Ich kann den Inhalt der Spalte überprüfen, aber ich muss den tatsächlichen Typ der Tabelle überprüfen.Wie überprüfe ich einen Spaltentyp mit einem Cursor?

Wer weiß, wie ich das tun kann?

set pagesize 1000; 
variable errorCode number; 

DECLARE 
    cursor c1 is 
     select theColumn from myDatabaseTable; 
    colRec c1%ROWTYPE; 
BEGIN 
    :errorCode := 0; 
    OPEN c1; 

    FETCH c1 INTO colRec; 
    IF colRec.TYPE_NAME <> 'CHAR' THEN 
     :errorCode := 1; 
    END IF; 


    CLOSE c1; 
END; 
/
exit :errorCode; 

Antwort

1

Sie können in einer der Data Dictionary-Views überprüfen: dba_tab_cols, all_tab_cols oder user_tab_cols von table_name und column_name.

Zum Beispiel

select data_type 
from dba_tab_cols 
where table_name = 'MYTABLE' 
and column_name = 'MYCOL' 

Wenn Sie die dba_tab_cols oder all_tab_cols Ansichten verwenden, werden Sie auch in der Abfrage enthalten sein Besitzer wollen:

select data_type 
from dba_tab_cols 
where owner = 'SCHEMA' 
and table_name = 'MYTABLE' 
and column_name = 'MYCOL' 
1

Sie die Prozedur DBMS_SQL.describe_columns durch Parsen verwenden könnte Ihre Abfrage als CURSOR. Die Prozedur enthält eine Auflistung mit Spalten, Datentypen und Größen.

col_type - gives you the datatypes. 
col_name - gives you the column_names. 
.. and so on. 

Siehe diesen Link für Details.

DBMS_SQL.DESCRIBE_COLUMNS

Hier ist ein Beispiel.

Der Typ ist eine Zahl, die einen bestimmten Datentyp darstellt. Hier ist die Liste, die die Nummern für wichtige Datentypen enthält.

Datatype  Number 

VARCHAR2  1 
NVARCHAR2  1 
NUMBER   2 
INTEGER   2 
DATE   12 
CHAR   96 
NCHAR   96 
CLOB   112 
NCLOB   112 
BLOB   113 
BFILE   114 

So können Sie entweder tun einen Vergleich wie

IF rec_t(i).col_type <> 96 THEN ...

oder einen Fall Block wie

CASE WHEN rec_t(i).col_type = 96 THEN 'CHAR' und vergleichen Sie auf den Ausgang des Falles Block schreiben .

Verwandte Themen