2012-10-24 17 views
6

Tôi đang thực hiện một số POC. Tôi đã viết một thủ tục lưu sẵn trong MySQL. Tôi đang sử dụng MySQLWorkbench cho các hoạt động cơ sở dữ liệu như tạo bảng mới, các thủ tục lưu sẵn, thực thi truy vấn, vv. Tôi đang quan sát một số hành vi thực thi không mong đợi ngay cả khi mã có vẻ chính xác và hợp lý.Không nhận được kết quả mong đợi khi sử dụng Bảng tạm thời hoặc Con trỏ trong MySQL

Dưới đây là các điểm.

Cách tiếp cận 1 -

Trong phương pháp đầu tiên, tôi là tạo bảng tạm thời và bổ sung hồ sơ sử dụng INSERT INTO ... SELECT tuyên bố với các cột được chọn.

CREATE TEMPORARY TABLE XYZ(....); 

INSERT INTO XYZ (....) SELECT (....) FROM ABC WHERE clause; 

Sau khi làm điều này, tôi nhận được các giá trị null chỉ trong vài cột của bảng tạm thời và tất cả các cột bảng temp khác được dân cư với đúng giá trị.

Nếu tôi chạy cùng một câu lệnh chọn (cho cùng một mệnh đề) trong tab SQL riêng biệt, tôi có thể thấy kết quả chính xác ngay cả đối với hai cột đó nhận giá trị null trong bảng tạm thời.

Nếu tôi thay đổi trên câu lệnh INSERT INTO..SELECT với * (tất cả các cột), sau đó tôi nhận được kết quả chính xác trong bảng temp ..

INSERT INTO XYZ SELECT * FROM ABC WHERE clause; 

Nhưng không muốn tất cả các cột. Tôi cũng đã cố gắng tạo bảng tạm thời với ENGINE = giá trị. Nhưng không hiệu quả. Thậm chí, tôi đã thử tất cả phương pháp này với bảng bình thường (không có TẠM), nhưng tiếc là

Cách tiếp cận 2-

Trong phương pháp thứ hai, tôi sửa đổi thủ tục lưu trữ cùng với con trỏ thay vì bảng temp. Nhưng ngay cả trong trường hợp này con trỏ không nhận được bất kỳ bản ghi (s).

DECLARE cur1 CURSOR FOR SELECT (....) FROM ABC WHERE clause; 

Nếu tôi chạy cùng một câu lệnh chọn (cho cùng một mệnh đề) trong tab SQL riêng biệt, tôi có thể thấy kết quả chính xác.

Tôi có làm gì sai không? Tôi có thể nhận được bất kỳ đề xuất nào về điều này không?

Xin cảm ơn trước.

+2

Bạn có thể hiển thị các cột bạn chọn trong câu lệnh SELECT, cũng như cấu trúc bảng cho bảng nguồn và temp không? Khó để xem những gì đang xảy ra mà không có nó. – SchmitzIT

+0

Cảm ơn Schmitz đã quay trở lại. Tôi xin lỗi vì đã trả lời muộn. Thực ra tôi đã tìm ra vấn đề trong Phương pháp # 1. Nguyên nhân gốc là tên biến được sử dụng như một tham số IN. Tôi đã sử dụng cùng tên biến IN làm tên cột của bảng. Và đó là lý do tại sao, tôi tin rằng, bằng cách nào đó nó đã được viết trên giá trị bảng thực tế. Tôi đã thay đổi tên biến và proc được lưu trữ của tôi chạy đúng. Cảm ơn sự giúp đỡ của bạn. –

+1

Vui lòng đăng câu trả lời này và chấp nhận câu trả lời để câu hỏi của bạn không hiển thị đang chờ xử lý. – RandomSeed

Trả lời

1

Tôi đã tìm ra vấn đề trong Phương pháp # 1. Nguyên nhân gốc là tên biến được sử dụng như một tham số IN. Tôi đã sử dụng cùng tên biến IN làm tên cột của bảng. Và đó là lý do tại sao, tôi tin rằng, bằng cách nào đó nó đã được viết trên giá trị bảng thực tế. Tôi đã thay đổi tên biến và proc được lưu trữ của tôi chạy đúng.