ฉันพยายามสร้างมุมมองด้วยพารามิเตอร์เพื่อรับข้อมูลแบบไดนามิก
(ฉันไม่สามารถใช้เงื่อนไข WHERE ได้เนื่องจากคำสั่ง select นั้นเปลี่ยนแปลงตามพารามิเตอร์)
สำหรับสิ่งนี้ ฉันเขียนขั้นตอนที่ส่งคืนข้อมูลที่จำเป็นให้ฉันเป็นประเภทอ็อบเจ็กต์ oracle
FUNCTION get_data(p_pk_id NUMBER, p_tab_type VARCHAR2)
RETURN M_TYPE_DATA_TAB
AS
v_table_collection M_TYPE_DATA_TAB;
BEGIN
-- my sql query which will change based on the params
RETURN v_table_collection;
END;
และฉันเรียกใช้แบบสอบถามแบบใช้เลือกดังนี้
SELECT * FROM TABLE(get_data(12345, 'MYTAB'));
ซึ่งให้ข้อมูลแก่ฉันภายใน น้อยกว่า 1 วินาที
สำหรับคำสั่ง select เดียวกันที่ฉันได้สร้างมุมมองเป็น
CREATE OR REPLACE VIEW my_view
AS SELECT * FROM TABLE(get_data(12345, 'MYTAB'));
ถ้าฉันสอบถามมุมมอง
SELECT * FROM my_view
ใช้เวลา มากกว่า 6 วินาที เพื่อรับข้อมูลเดียวกัน
มีแนวคิดใดบ้างว่าทำไมการสืบค้นข้อมูลเดียวกันจึงมีความแตกต่างอย่างมาก
การดูจะใช้เวลามากกว่าการสืบค้นปกติหรือไม่
select * from
ไว้ด้านบนของบางสิ่งก็ไม่สำคัญ เราจำเป็นต้องรู้อย่างแน่ชัดว่าอะไรที่ทำให้กรณีของคุณพิเศษ - person Jon Heller   schedule 13.12.2013