2009-09-04 8 views
15

इनफॉर्मिक्स iSQL में एक कमांड "info tables;" है जो सभी तालिकाओं को दिखाता है।
क्षेत्रों और उनके संबंधित डेटा प्रकार को देखने के लिए वाक्य रचना है "info columns for table;"जानकारी एसक्यूएल - सभी फ़ील्ड और टेबल सूचीबद्ध करें

वहां भी इसी तरह आदेश है कि सभी टेबल और सभी क्षेत्रों के लिए table.field से पता चलता है?

+0

आप कुछ और की जरूरत है, का विस्तार करने या अपने प्रश्न को स्पष्ट। –

+0

नहीं, वही है जो मैं चाहता था और जिस व्यक्ति से मुझे पता था वह वितरित करेगा! इनफॉर्मिक्स के साथ काम करने के लिए विशेष रूप से "LEFFLER !!!! मदद !!!!" के लिए – CheeseConQueso

+2

+1 : डी वह महान है! :) –

उत्तर

27

वरीय शामिल हों संकेतन का उपयोग करना:

SELECT TRIM(t.tabname) || '.' || TRIM(c.colname) AS table_dot_column 
    FROM "informix".systables AS t 
    JOIN "informix".syscolumns AS c ON t.tabid = c.tabid 
WHERE t.tabtype = 'T' 
    AND t.tabid >= 100 
ORDER BY t.tabname, c.colno; 

या पुराने जमाने में शामिल होने में जहां-खंड अंकन:

SELECT TRIM(t.tabname) || '.' || TRIM(c.colname) AS table_dot_column 
    FROM "informix".systables AS t, "informix".syscolumns AS c 
WHERE t.tabid = c.tabid 
    AND t.tabtype = 'T' 
    AND t.tabid >= 100 
ORDER BY t.tabname, c.colno; 

मान लिया जाये कि आप आईडीएस की एक पर्याप्त नवीनतम संस्करण का उपयोग कर रहे हैं, तो आप चयन सूची में उद्धृत कॉलम द्वारा ऑर्डर कर सकते हैं। अगर आपको शिकायतें मिलती हैं, तो चयन सूची में ऑर्डरिंग कॉलम जोड़ें।

शामिल मानदंड स्पष्ट है; टैबटाइप = 'टी' केवल सारणी सूचीबद्ध करता है, दृश्यों, समानार्थी और सिस्टेबल में सूचीबद्ध अन्य ऐसी वस्तुओं को सूचीबद्ध नहीं करता है; टैबिड> = 100 केवल डेटाबेस में स्पष्ट रूप से बनाए गए टेबल सूचीबद्ध करता है, न कि सिस्टम कैटलॉग।

इसमें टाइप जानकारी शामिल नहीं है - यदि आप चाहते हैं, तो आपको थोड़ा और काम करना होगा। आपको एक फ़ाइल $INFORMIXDIR/etc/xpg4_is.sql मिलेगी जिसमें XPG4 (X/Open Standard) सूचना स्कीमा (इसलिए फ़ाइल का नाम) के पुराने संस्करण के लिए कच्चे अनुमान शामिल हैं। वहां, syscolumns.coltype और syscolumns.collength से पहचानने योग्य तारों में टाइप जानकारी को डीकोड करने के लिए फ़ंक्शन इत्यादि हैं। हालांकि, मुझे दृढ़ता से संदेह है कि यह DISTINCT प्रकारों, और न ही अन्य उपयोगकर्ता परिभाषित प्रकारों को संभालता है। मुझे गलत साबित होने से प्रसन्नता होगी, लेकिन ... यदि आप उस फ़ाइल के प्रासंगिक हिस्सों को अपने डेटाबेस में जोड़ते हैं, तो आपको टाइप की जानकारी भी प्राप्त करनी चाहिए।

यह भी ध्यान रखें कि आईएसक्यूएल और डीबी-एक्सेस में सभी आईएनएफओ आदेश सामने वाले अंत में अनुकरण किए गए हैं, आईडीएस सर्वर में निष्पादित नहीं हैं। असल में, कार्यक्रम अनुरोध लेते हैं और इसे एक अधिक जटिल SQL कथन में परिवर्तित करते हैं। मेरे SQLCMD प्रोग्राम INFO स्टेटमेंट को कैसे प्रबंधित करता है, इसके लिए फ़ाइल sqlinfo.ec में कोड देखें जो SQLCMD (IIUG Software Archive से उपलब्ध है) का हिस्सा है। (नोट: एसक्यूएलसीएमडी का आईएनएफओ आउटपुट आईएसक्यूएल और डीबी-एक्सेस के आईएनएफओ आउटपुट से अलग रूप से स्वरूपित है।)

+0

जो मुझे चाहिए ... धन्यवाद फिर से – CheeseConQueso

+0

उत्थान जोनाथन के बाद अद्यतन के लिए धन्यवाद! – MattH

+0

यदि आप पहले से ही अपना कॉलम नाम जानते हैं तो आप टेबल नाम जानना चाहते हैं, तो आप उसी क्वेरी का उपयोग कर सकते हैं जहां शर्त 'c.colname =' COLUMNNAME 'है –

1

syscolumns तालिका का उपयोग करें। इस तरह की जानकारी में IBM Informix Guide to SQL

मैं सरल अजगर उपयोगिताओं कि Informix, Oracle और PostgreSQL के लिए स्कीमा जानकारी से पता चलता किया है वर्णन किया गया है। यदि आप डेटाबेस की तुलना करना चाहते हैं तो वे उपयोगी हैं।

1

जैसा कि जोनाथन लेफर का जवाब उल्लेख करता है, कॉलम प्रकारों और कॉलम विवरणों का पूरा प्रबंधन जटिल हो जाता है जैसा कि देखा जा सकता है SYSCOLUMNS दस्तावेज़ीकरण। लेकिन आप डेटाबेस को देख रहे हैं और अधिक जटिल प्रकार का उपयोग नहीं, उसकी स्क्रिप्ट को यह इसके अलावा बुनियादी प्रकार दिखाएगा और क्या NULLs अनुमति दी जाती है:

SELECT TRIM(t.tabname) || '.' || TRIM(c.colname) AS table_dot_column, 
CASE 
    WHEN MOD(coltype,256)=0 THEN 'CHAR' 
    WHEN MOD(coltype,256)=1 THEN 'SMALLINT' 
    WHEN MOD(coltype,256)=2 THEN 'INTEGER' 
    WHEN MOD(coltype,256)=3 THEN 'FLOAT' 
    WHEN MOD(coltype,256)=4 THEN 'SMALLFLOAT' 
    WHEN MOD(coltype,256)=5 THEN 'DECIMAL' 
    WHEN MOD(coltype,256)=6 THEN 'SERIAL' 
    WHEN MOD(coltype,256)=7 THEN 'DATE' 
    WHEN MOD(coltype,256)=8 THEN 'MONEY' 
    WHEN MOD(coltype,256)=9 THEN 'NULL' 
    WHEN MOD(coltype,256)=10 THEN 'DATETIME' 
    WHEN MOD(coltype,256)=11 THEN 'BYTE' 
    WHEN MOD(coltype,256)=12 THEN 'TEXT' 
    WHEN MOD(coltype,256)=13 THEN 'VARCHAR' 
    WHEN MOD(coltype,256)=14 THEN 'INTERVAL' 
    WHEN MOD(coltype,256)=15 THEN 'NCHAR' 
    WHEN MOD(coltype,256)=16 THEN 'NVARCHAR' 
    WHEN MOD(coltype,256)=17 THEN 'INT8' 
    WHEN MOD(coltype,256)=18 THEN 'SERIAL8' 
    WHEN MOD(coltype,256)=19 THEN 'SET' 
    WHEN MOD(coltype,256)=20 THEN 'MULTISET' 
    WHEN MOD(coltype,256)=21 THEN 'LIST' 
    WHEN MOD(coltype,256)=22 THEN 'ROW (unnamed)' 
    WHEN MOD(coltype,256)=23 THEN 'COLLECTION' 
    WHEN MOD(coltype,256)=40 THEN 'LVARCHAR fixed-length opaque types' 
    WHEN MOD(coltype,256)=41 THEN 'BLOB, BOOLEAN, CLOB variable-length opaque types' 
    WHEN MOD(coltype,256)=43 THEN 'LVARCHAR (client-side only)' 
    WHEN MOD(coltype,256)=45 THEN 'BOOLEAN' 
    WHEN MOD(coltype,256)=52 THEN 'BIGINT' 
    WHEN MOD(coltype,256)=53 THEN 'BIGSERIAL' 
    WHEN MOD(coltype,256)=2061 THEN 'IDSSECURITYLABEL' 
    WHEN MOD(coltype,256)=4118 THEN 'ROW (named)' 
    ELSE TO_CHAR(coltype) 
END AS Type, 
BITAND(coltype,256)=256 AS NotNull 
    FROM "informix".systables AS t 
    JOIN "informix".syscolumns AS c ON t.tabid = c.tabid 
WHERE t.tabtype = 'T' 
    AND t.tabid >= 100 
ORDER BY t.tabname, c.colno; 
संबंधित मुद्दे