2017-03-20 3 views
1

Attribute Ich versuche, eine Art mit dem rowid Datentyp zu schaffen, aber ich diese Störung erhalte wegen der Art zu verwenden Ich versuche:Objekttyp erstellen mit Rowid

SQL> CREATE TYPE join_t IS OBJECT (inn rowid, out rowid); 
/

Warning: Type created with compilation errors. 

Auch wenn ich schaffen kann eine Tabelle mit rowid Datentyp:

SQL> create table test_rowid (inn rowid,out rowid); 

Table created. 

Ist es möglich, diese Art Attribut join_t oben, mit rowid-Typ zu schaffen?

+1

"Ist es möglich". Nein, ist es nicht. [Einschränkungen für den Datentyp] (https://docs.oracle.com/cd/E11882_01/appdev.112/e25519/create_type.htm#LNPLS01375) –

Antwort

3

Nein, Sie können keinen Objekttyp mit rowid Feldern erstellen. Wenn man sich die tatsächlichen Fehler sieht angehoben, über die user_errors Ansicht oder mit dem SQL * Plus-Befehl show errors, werden Sie sehen:

LINE/COL ERROR 
-------- ------------------------------------------------------------------------------ 
1/28  PLS-00530: Illegal type used for object type attribute: 'ROWID'. 
1/39  PLS-00530: Illegal type used for object type attribute: 'ROWID'. 

The documenation says:

Beschränkungen für Datentyp

  • Sie können die NOT NULL-Einschränkung für ein Attribut nicht erzwingen.
  • Sie können keine Attribute vom Typ ROWID, LONG oder LONG RAW angeben.
  • Sie können für einen ADT keinen Datentyp von UROWID angeben.
    ...

Als Abhilfe können, könnten Sie möglicherweise einen String-Typ in Ihrem Objekt verwenden, und die Werte umwandeln, wenn sie immer die Feldwerte, über die rowidtochar und chartorowid Funktionen:

CREATE TYPE join_t IS OBJECT (inn varchar2(18), out varchar2(18)); 
/

Type JOIN_T compiled 

SELECT join_t(rowidtochar(rowid), rowidtochar(rowid)) FROM DUAL; 

JOIN_T(ROWIDTOCHAR(ROWID),ROWIDTOCHAR(ROWID))(INN, OUT) 
------------------------------------------------------- 
JOIN_T('AAAAB0AABAAAAOhAAA', 'AAAAB0AABAAAAOhAAA') 

Die Speicherung von rowids in einem Objekt scheint jedoch nicht besonders nützlich, da sie sich ändern können.

+0

Ich mache das ... mit dem char-Typ innerhalb der Funktion ROWIDTOCHAR. Wollte wissen, ob ich es wirklich nicht schaffen konnte – Siqueira

+0

@Siqueira - Ihre Frage hat das nicht erwähnt. Und nein, Sie können "rowid" wirklich nicht als Objektattribut-Datentyp verwenden, tut mir leid. –