Oracle 如何在side proceudre中创建视图
在过程内部创建视图时出错,请使用以下代码。但是我需要动态地创建这个视图。 当我尝试使用现有视图运行相同的脚本时,它工作正常,但我需要在光标初始化之前动态创建视图Oracle 如何在side proceudre中创建视图,oracle,plsql,Oracle,Plsql,在过程内部创建视图时出错,请使用以下代码。但是我需要动态地创建这个视图。 当我尝试使用现有视图运行相同的脚本时,它工作正常,但我需要在光标初始化之前动态创建视图 CREATE OR REPLACE PROCEDURE proc_dashboard_tiles (out_dashboard_tab OUT return_dashboard_arr, start_date IN DATE,
CREATE OR REPLACE PROCEDURE proc_dashboard_tiles (out_dashboard_tab OUT return_dashboard_arr,
start_date IN DATE,
end_date IN DATE
) IS
lrec return_dashboard_report;
l_num_counter NUMBER := 0;
-- CREATE OR REPLACE VIEW x AS (
-- EXECUTE IMMEDIATE
-- 'SELECT
-- COUNT(*) count,
-- CONCAT('Tier ',customer_tier) value,
-- 'customer_tier' viewType
-- FROM
-- bi_request
-- WHERE
-- customer_tier is not null
-- AND START_DATE BETWEEN start_date and end_date
-- GROUP BY
-- customer_tier'
-- );
CURSOR cur_dashboard_data IS
SELECT
count,
value,
viewType
FROM
v_customer_tier
;
TYPE rec_dashboard_data IS
TABLE OF cur_dashboard_data%rowtype INDEX BY PLS_INTEGER;
l_cur_dashboard_data rec_dashboard_data;
BEGIN
-- My code EXCEPTION
dbms_output.put_line('My code');
END;````
while creating a view inside the procedure through error.
when I try to run the same script with existing view it's working fine but I need to create view dynamically before the cursor initialization
您的代码应该如下所示:
Declare
rec_dashboard_data sys_refcursor;
-- other variable declaration
Begin
Execute immediate q'#<your create view sql>#';
Open rec_dashboard_data for 'SELECT
count,
value,
viewType
FROM
v_customer_tier';
-- other task
--Exception block
End;
/
干杯 如果没有execute immediate,您无法在过程中执行ddl,而且它应该在begin块中,而不是DECLAREY中。您需要在execute immediate中具有create或replace视图。但是,如果在创建过程时该视图不存在,那么对该视图的每个后续引用都需要通过动态SQL进行—您不能在游标定义或后续变量声明中使用静态SQL。这是可能的,但要复杂得多。首先,为什么要尝试动态创建视图?也许你想定义一个流水线表函数和/或一个返回REF游标的函数,你可以将日期传递给它?我同意Justin的观点。你应该告诉我们你为什么要这么做。除非绝对需要,否则最好避免使用动态sql。