2008-12-09 17 views
7

Có thể tạo danh sách tất cả các thành viên nguồn trong tệp nguồn iSeries bằng cách sử dụng SQL không?Danh sách các thành viên nguồn trong một tệp với SQL

Có thể tương tự như nhận định nghĩa bảng từ SYSTABLES và SYSCOLUMNS, nhưng tôi không thể tìm thấy bất kỳ thứ gì cho đến thời điểm này.

+0

Nếu bạn không nhận được một câu trả lời đây, hãy thử hỏi trên trên [Midrange-L mailing list] (http: // danh sách .midrange.com/listinfo/midrange-l). –

Trả lời

4

Đáng buồn là SQL không biết gì về thành viên, vì vậy tất cả các thông tin nguồn-bạn có thể nhận được từ qsys2.syscolumns là, chúng bao gồm ba cột.

bạn muốn thông tin thành viên và tôi đề xuất sử dụng qshell (STRQSH) cùng với truy vấn tới qsys2.systables dưới dạng tệp nguồn được đánh dấu đặc biệt ở đó.

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

tôi đánh mạnh vào cùng một qshell một lót cho bản sao & mục đích dán ..

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                    

nó Ống mỗi thành viên mà nó tìm thấy vào thư mục IFS/home/myuser/myfile bạn cũng có thể chỉ định một Thành viên Sourcefile. cảm thấy tự do để sửa đổi nhu cầu của bạn.

PS: nó ném lỗi cho Sourcefiles ngồi trực tiếp trong /QSYS.LIB, nhưng tôi nghĩ rằng bạn không muốn những anyway ..

nâng niu mang! :)

2

Bạn có thể viết chương trình CL truy xuất danh sách thành viên bằng lệnh DSPFD. Có lẽ bạn có thể gọi chương trình đó từ một thủ tục lưu sẵn?

0

Về cơ bản, với giá chỉ thư viện và nguồn file:

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

Tuy nhiên, cho cụ thể hơn, một thủ tục được nêu trong this discussion.

+0

@chappjc Chỉ cần xác nhận - Chỉnh sửa của bạn là định dạng các câu lệnh SQL trong một khối mã và chuyển đổi URL thảo luận rõ ràng thành siêu liên kết bên dưới văn bản "thảo luận này"? Lời xin lỗi của tôi khi tôi gọn gàng định dạng của mình. –

+0

Có. Xem [sửa đổi] (http://stackoverflow.com/posts/22822770/revisions) để xem các thay đổi. – chappjc

+0

Một thủ tục hơi nâng cao hơn được mô tả trong [Sức mạnh của các hàm bảng do người dùng định nghĩa] (http://www.ibm.com/developerworks/ibmi/library/i-power-of-udtf/). Xem phần mô tả về ListMember_Fnc UDTF. – user2338816

2

Chỉ cần sử dụng điều này, nó hoạt động một điều trị.

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

sau đó trong SQL

SELECT MLNAME FROM MBRLIST 
5

More bảng và quan điểm đã được bổ sung vào danh mục hệ thống kể từ khi câu trả lời khác đã được trình bày. Bây giờ, bạn có thể nhận được danh sách các thành viên (hay còn gọi là "phân vùng" trong SQL cách nói) cho một tập tin nhất định (hay còn gọi là bảng) như thế này:

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

Bạn cũng có thể nhận được các thông tin khác từ SYSPARTITIONSTAT như số lượng hàng trong mỗi thành viên và dấu thời gian cho thay đổi cuối cùng, lưu, khôi phục hoặc sử dụng.

+0

Đây là thông tin tôi đang tìm kiếm hôm nay. Cảm ơn. –

0

Tôi cần nó để tìm vị trí của một thành viên nguồn cụ thể, chương trình RPGLE có/COPY #IFSIO_H, nhưng không đủ điều kiện từ Tệp nguồn. Vì vậy, tôi phải viết một QSH nhanh để tìm thành viên nguồn cụ thể trong tất cả các thư viện, bắt đầu từ QSYS.LIB: Điều này chỉ hoạt động nếu trong Member có chuỗi.

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

Phải mất thời gian, grep và tìm được đệ trình lên hàng loạt

Các vấn đề liên quan