2010-07-09 30 views
5

Tôi có thể sử dụng all_arguments và all_procedures để liệt kê các thủ tục và chức năng bên trong bất kỳ gói nào và với DBMS_METADATA tôi có thể trích xuất DDL cho gói đó. Có cách nào dễ dàng (không phải là nhiều cuộc gọi công cụ và chuỗi con) để có được thủ tục hoặc mã nguồn chức năng riêng biệt cho từng khối mã riêng biệt trong một gói.Mã nguồn cho thủ tục hoặc hàm được lưu trữ cụ thể

Điều gì đó tương tự:

Chủ sở hữu | Tên gói | Tên đối tượng | Quá tải | Đối số | Nguồn

Rõ ràng việc sử dụng chuỗi con và công cụ sẽ trình bày các vấn đề với chức năng quá tải.

All_arguments có trường subprogram_id theo tài liệu rất thưa về nó giống như nó tham chiếu duy nhất quy trình liên quan đến nó trong gói nhưng dường như không có bất kỳ thứ gì sử dụng nó.

Cổ vũ trước

+0

Mục đích của bạn trong việc trích xuất các định nghĩa chức năng là gì? –

+0

Tôi có nghĩa là định nghĩa theo cách thức DDL - thay đổi thành mã nguồn để thử và rõ ràng hơn là tôi đang cố liệt kê mã cho một thủ tục hoặc hàm cụ thể – Chris

+0

"Liệt kê mã" như đang in chức năng của chính nó sang máy in hoặc cô lập trong một tập tin? –

Trả lời

3

IIRC, PLSQL cho phép các gói và hàm lồng nhau. Trong trường hợp này, bạn sẽ thấy rằng "instring" và "substring" có thể không đủ để trích xuất mã nguồn, vì bạn đang đối mặt với đệ quy, và các hàm chuỗi thường chỉ xử lý một lớp tính toán nhỏ hơn (thường là các biểu thức thông thường). Đây là một vấn đề cổ điển mà mọi người đã cố gắng phân tích ngôn ngữ bằng thao tác chuỗi đơn giản. Bạn có thể vượt qua các giới hạn của các hàm chuỗi bằng cách hacking để tạo ra trình phân tích cú pháp của người nghèo nhưng đây có thể là một lượng đáng ngạc nhiên nếu bạn muốn nó chết người, bởi vì bạn phải xử lý ít nhất các quy tắc ngữ pháp đệ quy khai thác.

Một cách khác để truy cập đáng tin cậy vào các phần tử của gói PLSQL là sử dụng trình phân tích cú pháp ngôn ngữ. DMS Software Reengineering Toolkit có trình phân tích cú pháp PLSQL đầy đủ.

Trước tiên, bạn phải trích xuất văn bản gói vào tệp và sau đó áp dụng trình phân tích cú pháp PLSQL cho nó; tạo ra một cây cú pháp trừu tượng (AST) bên trong trình phân tích cú pháp. Với tên của một hàm, nó khá dễ tìm kiếm hàm AST với một tên phù hợp. Bạn sẽ kết thúc với nhiều hơn một hit nếu bạn có chức năng quá tải; bạn có thể đủ điều kiện chức năng theo hệ thống phân cấp mà nó được nhúng hoặc thông tin về các đối số mà bạn có thể có. Đã xác định được một hàm cụ thể trong AST, người ta có thể yêu cầu DMS in đẹp cây đó, và nó sẽ tạo lại văn bản (hoàn chỉnh với các chú thích) cho hàm đó.

+0

+1, câu trả lời hay và con trỏ đến Trình phân tích cú pháp PLSQL. – DCookie

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