2008-12-09 10 views
7

के साथ फ़ाइल में स्रोत सदस्यों की सूची एसक्यूएल का उपयोग करते हुए iSeries स्रोत फ़ाइल के भीतर सभी स्रोत सदस्यों की एक सूची उत्पन्न करना संभव है?एसक्यूएल

सिस्टम और SYSCOLUMNS से ​​तालिका परिभाषाएं प्राप्त करने के समान हो सकता है, लेकिन मैं अब तक कुछ भी नहीं ढूंढ पा रहा हूं।

+0

को प्रस्तुत कर रहे तुम यहाँ एक जवाब नहीं मिलता है, [मध्यम-श्रेणी-एल मेलिंग सूची] (http पर अधिक पूछने का प्रयास लगता है: // सूचियों .midrange.com/listinfo/midrange-एल)। –

उत्तर

4

दुख की बात है कि एसक्यूएल सदस्यों के बारे में कुछ भी नहीं जानता है, इसलिए qsys2.syscolumns से प्राप्त सभी स्रोत फ़ाइल-जानकारी यह है कि उनमें तीन कॉलम हैं।

आप सदस्य की जानकारी चाहते हैं और मैं qsys2.systables के लिए क्वेरी के साथ qshell (STRQSH) का उपयोग करने का सुझाव देता हूं क्योंकि स्रोत फ़ाइलों को विशेष रूप से चिह्नित किया जाता है।

select table_schema , table_name from qsys2.systables where File_type = 'S' 

मैं एक साथ एक qshell प्रतिलिपि & पेस्ट प्रयोजनों के लिए एक लाइनर ..

db2 -S "select '/QSYS.LIB/' concat table_schema concat '.LIB/' concat table_name concat '.FILE' from qsys2.systables where File_type = 'S'" | grep '/' | xargs -n1 find >/home/myuser/myfile                    

यह पाइप हर सदस्य/घर यह आईएफएस निर्देशिका पाता/MyUser/myFile आप भी एक निर्दिष्ट कर सकते हैं whacked Sourcefile सदस्य। अपनी जरूरतों को संशोधित करने के लिए स्वतंत्र महसूस करें।

पुनश्च: यह सीधे /QSYS.LIB में बैठे Sourcefiles के लिए त्रुटियों को फेंकता है, लेकिन मुझे लगता है कि आप उन वैसे भी नहीं करना चाहते हैं ..

ले देखभाल! :)

2

आप एक सीएल प्रोग्राम लिख सकते हैं जो डीएसपीएफडी कमांड का उपयोग कर सदस्यों की सूची पुनर्प्राप्त करता है। शायद आप उस प्रोग्राम को संग्रहीत प्रक्रिया से कॉल कर सकते हैं?

0

असल में, बस पुस्तकालय और स्रोत फ़ाइल के लिए:

SELECT sys_dname, sys_tname  
FROM qsys2/systables   
ORDER BY sys_dname, sys_tname 

हालांकि, और अधिक विस्तार के लिए, एक प्रक्रिया this discussion में उल्लिखित है।

+0

@chappjc बस पुष्टि करने के लिए - आपका संपादन SQL कथन को कोड-ब्लॉक में प्रारूपित करना था और स्पष्ट चर्चा URL को "इस चर्चा" टेक्स्ट के नीचे एक हाइपरलिंक में परिवर्तित करना था? मेरी माफी माँगने के रूप में मैं अपने स्वरूपण को साफ करता हूं। –

+0

हां। परिवर्तन देखने के लिए [संशोधन] (http://stackoverflow.com/posts/22822770/revisions) देखें। – chappjc

+0

कुछ हद तक अधिक उन्नत प्रक्रिया में वर्णित है [उपयोगकर्ता द्वारा परिभाषित तालिका कार्यों की शक्ति] (http://www.ibm.com/developerworks/ibmi/library/i-power-of-udtf/)। ListMember_Fnc UDTF का वर्णन करने वाला अनुभाग देखें। – user2338816

2

बस इसका इस्तेमाल किया, यह एक इलाज करता है।

DSPFD FILE(Libname/Filename) 
     TYPE(*MBRLIST)   
     OUTPUT(*OUTFILE)  
     OUTFILE(QTEMP/MBRLIST) 

तो एसक्यूएल में

SELECT MLNAME FROM MBRLIST 
5

अधिक टेबल और विचारों प्रणाली सूची में जोड़ा गया है के बाद से अन्य उत्तर प्रस्तुत किए गए।

SELECT TABLE_PARTITION FROM SYSPARTITIONSTAT 
WHERE TABLE_NAME = myfile AND TABLE_SCHEMA = mylib 

आप भी इस तरह के पंक्तियों की संख्या के रूप में SYSPARTITIONSTAT से अन्य जानकारी प्राप्त कर सकते हैं: अब, आप किसी दिए गए फ़ाइल (उर्फ तालिका) इस तरह के लिए सदस्यों (उर्फ "विभाजन" एसक्यूएल की भाषा में) की सूची प्राप्त कर सकते हैं प्रत्येक सदस्य में, और अंतिम परिवर्तन के लिए टाइमस्टैम्प, सहेजें, पुनर्स्थापित करें या उपयोग करें।

+0

यह वह जानकारी है जिसे मैं आज ढूंढ रहा था। धन्यवाद। –

0

मुझे यह पता लगाने की आवश्यकता है कि कोई विशिष्ट स्रोत सदस्य कहां स्थित था, RPGLE प्रोग्राम में/COPY #IFSIO_H है, लेकिन यह स्रोत फ़ाइल से योग्य नहीं है। इसलिए, मुझे QSYS से शुरू होने वाले सभी पुस्तकालयों में विशिष्ट स्रोत सदस्य को खोजने के लिए एक त्वरित QSH लिखना पड़ा। LIB: यह केवल तभी काम करता है जब सदस्य के भीतर स्ट्रिंग हो।

find '/QSYS.LIB/' -name '*.MBR' -exec grep -rins '#IFSIO_H' {} \; 

यह समय, ग्रेप लेता है और बैच