Avatar billede max33 Nybegynder
03. marts 2015 - 14:23 Der er 20 kommentarer og
1 løsning

DESCRIBE tabel

Hej

Jeg vil gerne se strukturen i nogle tabeller som jeg skal tilgå på en ekstern server.

Ville tro jeg kunne gøre det således:
DESCRIBE 'tabel'

Men er nød til at bruge:
SELECT xxx FROM 'tabel'

Kan man det ?
Avatar billede max33 Nybegynder
03. marts 2015 - 14:35 #1
Har prøvet:
select * from tabel(dbms_xplan.display)

men for følgende fejl:
ORA-00933: SQL command not properly ended
Avatar billede Slater Ekspert
03. marts 2015 - 14:37 #2
Ifølge denne side:
http://ss64.com/ora/desc.html

Er DESCRIBE 'tabel'

det samme som:

SELECT
column_name "Name",
nullable "Null?",
concat(concat(concat(data_type,'('),data_length),')') "Type"
FROM user_tab_columns
WHERE table_name='TABLE_NAME_TO_DESCRIBE';
Avatar billede max33 Nybegynder
03. marts 2015 - 15:08 #3
Ikke helt som forventet(resultatet kommer som xml...):
<resultset>
<columnNames>Name</columnNames>
<columnNames>Null:1</columnNames>
<columnNames>Type</columnNames>
<columnTypes>VARCHAR2</columnTypes>
<columnTypes>VARCHAR2</columnTypes>
<columnTypes>VARCHAR2</columnTypes>
<numCols>3</numCols>
<numRows>0</numRows>
</resultset>

Hvis jeg gør:
SELECT * FROM user_tab_columns WHERE table_name='TABEL'
<resultset>
<columnNames>TABLE_NAME</columnNames>
<columnNames>COLUMN_NAME</columnNames>
<columnNames>DATA_TYPE</columnNames>
<columnNames>DATA_TYPE_MOD</columnNames>
<columnNames>DATA_TYPE_OWNER</columnNames>
<columnNames>DATA_LENGTH</columnNames>
<columnNames>DATA_PRECISION</columnNames>
<columnNames>DATA_SCALE</columnNames>
<columnNames>NULLABLE</columnNames>
<columnNames>COLUMN_ID</columnNames>
<columnNames>DEFAULT_LENGTH</columnNames>
<columnNames>DATA_DEFAULT</columnNames>
<columnNames>NUM_DISTINCT</columnNames>
<columnNames>LOW_VALUE</columnNames>
<columnNames>HIGH_VALUE</columnNames>
<columnNames>DENSITY</columnNames>
<columnNames>NUM_NULLS</columnNames>
<columnNames>NUM_BUCKETS</columnNames>
<columnNames>LAST_ANALYZED</columnNames>
<columnNames>SAMPLE_SIZE</columnNames>
<columnNames>CHARACTER_SET_NAME</columnNames>
<columnNames>CHAR_COL_DECL_LENGTH</columnNames>
<columnNames>GLOBAL_STATS</columnNames>
<columnNames>USER_STATS</columnNames>
<columnNames>AVG_COL_LEN</columnNames>
<columnNames>CHAR_LENGTH</columnNames>
<columnNames>CHAR_USED</columnNames>
<columnNames>V80_FMT_IMAGE</columnNames>
<columnNames>DATA_UPGRADED</columnNames>
<columnNames>HISTOGRAM</columnNames>
<columnTypes>VARCHAR2</columnTypes>
<columnTypes>VARCHAR2</columnTypes>
<columnTypes>VARCHAR2</columnTypes>
<columnTypes>VARCHAR2</columnTypes>
<columnTypes>VARCHAR2</columnTypes>
<columnTypes>FLOAT</columnTypes>
<columnTypes>FLOAT</columnTypes>
<columnTypes>FLOAT</columnTypes>
<columnTypes>VARCHAR2</columnTypes>
<columnTypes>FLOAT</columnTypes>
<columnTypes>FLOAT</columnTypes>
<columnTypes>LONG</columnTypes>
<columnTypes>FLOAT</columnTypes>
<columnTypes>RAW</columnTypes>
<columnTypes>RAW</columnTypes>
<columnTypes>FLOAT</columnTypes>
<columnTypes>FLOAT</columnTypes>
<columnTypes>FLOAT</columnTypes>
<columnTypes>DATE</columnTypes>
<columnTypes>FLOAT</columnTypes>
<columnTypes>VARCHAR2</columnTypes>
<columnTypes>FLOAT</columnTypes>
<columnTypes>VARCHAR2</columnTypes>
<columnTypes>VARCHAR2</columnTypes>
<columnTypes>FLOAT</columnTypes>
<columnTypes>FLOAT</columnTypes>
<columnTypes>VARCHAR2</columnTypes>
<columnTypes>VARCHAR2</columnTypes>
<columnTypes>VARCHAR2</columnTypes>
<columnTypes>VARCHAR2</columnTypes>
<numCols>30</numCols>
<numRows>0</numRows>
</resultset>

Mangler dog stadig længden på f.eks. varchar2
Avatar billede max33 Nybegynder
03. marts 2015 - 15:11 #4
Kan se det ikke er rigtigt da jeg får samme resultat med en anden tabel...
Avatar billede arne_v Ekspert
03. marts 2015 - 15:13 #5
Hvad med:

SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'etellerandet'

?
Avatar billede max33 Nybegynder
03. marts 2015 - 15:17 #6
Arne:
<error>
<elementName>Could not perform select.</elementName>
<errorMesage>ORA-00942: table or view does not exist</errorMesage>
</error>
Avatar billede Slettet bruger
03. marts 2015 - 15:26 #7
select * from user_tab_columns where table_name = '<TABELNAVN>'
Avatar billede arne_v Ekspert
03. marts 2015 - 15:29 #8
Saa Oracle understoetter ikke INFORMATION_SCHEMA. Ak.
Avatar billede arne_v Ekspert
03. marts 2015 - 15:31 #9
men DATA_LENGTH indeholder vel laengden paa VARCHAR2 felter
Avatar billede Slettet bruger
03. marts 2015 - 15:52 #10
Hej Arne, jeg tror INFORMATION_SCHEMA er specifikt for MySQL. I Oracle kan du bruge DESCRIBE i SQL*Plus eller bare selv trække informationen fra de dynamiske views som fx USER_TABLES, USER_TAB_COLUMNS, USER_CONSTRAINTS, USER_OBJECTS og så videre. Hvis du vil se mere end din egen bruger, kan man bruge ALL i stedet for USER, som fx ALL_OBJECTS. Det giver dig information om de objekter, du har rettigheder til at se. Og ja - feltet DATA_LENGTH med videre definerer detaljer om felttype.
Avatar billede max33 Nybegynder
03. marts 2015 - 16:00 #11
#7 er prøver i #3 og har selv kommenteret i #4
Avatar billede arne_v Ekspert
03. marts 2015 - 16:02 #12
INFORMATION_SCHEMA er specifik for SQL standarden.

:-)
Avatar billede max33 Nybegynder
03. marts 2015 - 16:05 #13
#9 som jeg ser det:
SELECT column_name "Name", nullable "Null?", data_type "Type" FROM user_tab_columns WHERE table_name='Tabelnavn'

<resultset>
<columnNames>Name</columnNames>
<columnNames>Null:1</columnNames>
<columnNames>Type</columnNames>
<columnTypes>VARCHAR2</columnTypes>
<columnTypes>VARCHAR2</columnTypes>
<columnTypes>VARCHAR2</columnTypes>
<numCols>3</numCols>
<numRows>0</numRows>
</resultset>

Samme svar som #3....
Avatar billede arne_v Ekspert
03. marts 2015 - 16:14 #14
Du har vel 2 problemer.

1) du finder ingen raekker d.v.s. at der ikke er noget match paa tabel navn.

2) du selecter ikke DATA_LENGTG og faar derfor ikke laengden ud.
Avatar billede max33 Nybegynder
03. marts 2015 - 16:20 #15
#14
Det første udtræk i #3 er efter select i #2 som indholder data_length.

og da det udtræk i #13 giver samme resultat som det første i #3 går jeg udfra at data_length bliver ignoreret...

kan godt select * from TABEL

Jeg ved ikke om det kan være et problem med rettigheder?
Avatar billede arne_v Ekspert
03. marts 2015 - 16:32 #16
Proev:

SELECT * FROM user_tab_columns

og se om ikke du fara data_length vaerdier og check saa table_name ofg se hvorfor du ikke faar nogle raekker med din where.
Avatar billede max33 Nybegynder
03. marts 2015 - 17:10 #17
SELECT * FROM user_tab_columns:
<resultset>
<columnNames>TABLE_NAME</columnNames>
<columnNames>COLUMN_NAME</columnNames>
<columnNames>DATA_TYPE</columnNames>
<columnNames>DATA_TYPE_MOD</columnNames>
<columnNames>DATA_TYPE_OWNER</columnNames>
<columnNames>DATA_LENGTH</columnNames>
<columnNames>DATA_PRECISION</columnNames>
<columnNames>DATA_SCALE</columnNames>
<columnNames>NULLABLE</columnNames>
<columnNames>COLUMN_ID</columnNames>
<columnNames>DEFAULT_LENGTH</columnNames>
<columnNames>DATA_DEFAULT</columnNames>
<columnNames>NUM_DISTINCT</columnNames>
<columnNames>LOW_VALUE</columnNames>
<columnNames>HIGH_VALUE</columnNames>
<columnNames>DENSITY</columnNames>
<columnNames>NUM_NULLS</columnNames>
<columnNames>NUM_BUCKETS</columnNames>
<columnNames>LAST_ANALYZED</columnNames>
<columnNames>SAMPLE_SIZE</columnNames>
<columnNames>CHARACTER_SET_NAME</columnNames>
<columnNames>CHAR_COL_DECL_LENGTH</columnNames>
<columnNames>GLOBAL_STATS</columnNames>
<columnNames>USER_STATS</columnNames>
<columnNames>AVG_COL_LEN</columnNames>
<columnNames>CHAR_LENGTH</columnNames>
<columnNames>CHAR_USED</columnNames>
<columnNames>V80_FMT_IMAGE</columnNames>
<columnNames>DATA_UPGRADED</columnNames>
<columnNames>HISTOGRAM</columnNames>
<columnTypes>VARCHAR2</columnTypes>
<columnTypes>VARCHAR2</columnTypes>
<columnTypes>VARCHAR2</columnTypes>
<columnTypes>VARCHAR2</columnTypes>
<columnTypes>VARCHAR2</columnTypes>
<columnTypes>FLOAT</columnTypes>
<columnTypes>FLOAT</columnTypes>
<columnTypes>FLOAT</columnTypes>
<columnTypes>VARCHAR2</columnTypes>
<columnTypes>FLOAT</columnTypes>
<columnTypes>FLOAT</columnTypes>
<columnTypes>LONG</columnTypes>
<columnTypes>FLOAT</columnTypes>
<columnTypes>RAW</columnTypes>
<columnTypes>RAW</columnTypes>
<columnTypes>FLOAT</columnTypes>
<columnTypes>FLOAT</columnTypes>
<columnTypes>FLOAT</columnTypes>
<columnTypes>DATE</columnTypes>
<columnTypes>FLOAT</columnTypes>
<columnTypes>VARCHAR2</columnTypes>
<columnTypes>FLOAT</columnTypes>
<columnTypes>VARCHAR2</columnTypes>
<columnTypes>VARCHAR2</columnTypes>
<columnTypes>FLOAT</columnTypes>
<columnTypes>FLOAT</columnTypes>
<columnTypes>VARCHAR2</columnTypes>
<columnTypes>VARCHAR2</columnTypes>
<columnTypes>VARCHAR2</columnTypes>
<columnTypes>VARCHAR2</columnTypes>
<numCols>30</numCols>
<numRows>0</numRows>
</resultset>

Skulle vel indholde en liste over tabeller? men den er tom??
Avatar billede arne_v Ekspert
03. marts 2015 - 17:25 #18
gabende tom
Avatar billede max33 Nybegynder
03. marts 2015 - 17:28 #19
#18
fordi jeg ikke har rettigheder eller fordi det ligger et andet sted?

Vil jo mene jeg skulle få en fejl hvis det var pga manglende rettigheder?
Avatar billede max33 Nybegynder
03. marts 2015 - 17:32 #20
Min plan var at lave et script der kunne oprette nogle tabeller i min mysql database udfra dette udtræk som kunne komme fra dette opslag.

Jeg kan manuelt oprette tabellerne, og kender også kolonnerne, men mangler typen, er sq lidt pis hvis jeg ikke kan få den med det samme.
Avatar billede max33 Nybegynder
11. marts 2015 - 10:59 #21
Lukker
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester