将 PL/SQL 块更改为过程
Changing an PL/SQL Block into a Procedure
我有这个 PL/SQL 块,每次我 运行 它都会创建一个视图。
我想将它更改为名称为 "VIEW_PROC" 的存储过程,这样每次我想创建视图时我只需要 运行 proc。
我该怎么做?
set serveroutput on
declare
compte number;
DQEntity varchar2(50);
DynSQL varchar2(4000);
finale varchar2(4000);
v1 varchar2(40):='''DD-MM-YY''';
createview varchar2(4000) := 'CREATE OR REPLACE FORCE EDITIONABLE VIEW "DV2_OBIDMT"."F_GENERAL_DATA_QLTY3" ("SRC_SYS_ID", "SOFT_RULE_NAME", "ENTITY_NAME", "DATE_", "PASSES", "FAILS") AS (';
begin
select COUNT(*) into compte
from DV2_OBIADM.IM_LUT_ENTITY_SOFT_RULES;
for ins in (select ENTITY_NAME as Q1
from DV2_OBIADM.IM_LUT_ENTITY_SOFT_RULES
)
loop
DQEntity:= ins.Q1;
DynSQL := DynSQL || 'select
SRC.SRC_SYS_ID,
EN.SOFT_RULE_NAME,
EN.ENTITY_NAME,
(to_date(to_char(SRC.LDTS,'||v1||'))) as date_,
sum(case when SRC.QLTY_TEST= '||'''Pass'''||' then 1 else 0 end) as Passes,
sum(case when SRC.QLTY_TEST= '||'''Fail'''||' then 1 else 0 end) as Fails
from "DV2_OBIADM".IM_LUT_ENTITY_SOFT_RULES EN, ' ||DQEntity|| ' SRC
WHERE EN.ENTITY_NAME = ''' || DQEntity || '''
GROUP BY SRC.SRC_SYS_ID, EN.ENTITY_NAME, EN.SOFT_RULE_NAME,(to_date(to_char(SRC.LDTS,'||v1||'))) ' ;
compte := compte -1;
if compte >= 1 then
DynSQL := DynSQL ||chr(13)||chr(10)|| ' UNION ALL ';
end if;
end loop;
finale := createview || DynSQL;
finale := finale|| ')';
execute immediate finale;
end;
感谢您的帮助!
这是创建存储过程的代码:
create or replace procedure VIEW_PROC is
compte number;
DQEntity varchar2(50);
DynSQL varchar2(4000);
finale varchar2(4000);
v1 varchar2(40):='''DD-MM-YY''';
createview varchar2(4000) := 'CREATE OR REPLACE FORCE EDITIONABLE VIEW "DV2_OBIDMT"."F_GENERAL_DATA_QLTY3" ("SRC_SYS_ID", "SOFT_RULE_NAME", "ENTITY_NAME", "DATE_", "PASSES", "FAILS") AS
(';
begin
select COUNT(*) into compte
from DV2_OBIADM.IM_LUT_ENTITY_SOFT_RULES;
for ins in (
select ENTITY_NAME as Q1
from DV2_OBIADM.IM_LUT_ENTITY_SOFT_RULES
) loop
DQEntity:= ins.Q1;
DynSQL := DynSQL || 'select
SRC.SRC_SYS_ID,
EN.SOFT_RULE_NAME,
EN.ENTITY_NAME,
(to_date(to_char(SRC.LDTS,'||v1||'))) as date_,
sum(case when SRC.QLTY_TEST= '||'''Pass'''||' then 1 else 0 end) as Passes,
sum(case when SRC.QLTY_TEST= '||'''Fail'''||' then 1 else 0 end) as Fails
from "DV2_OBIADM".IM_LUT_ENTITY_SOFT_RULES EN, ' ||DQEntity|| ' SRC
WHERE EN.ENTITY_NAME = ''' || DQEntity || '''
GROUP BY SRC.SRC_SYS_ID, EN.ENTITY_NAME, EN.SOFT_RULE_NAME,(to_date(to_char(SRC.LDTS,'||v1||'))) ' ;
compte := compte -1;
if compte >= 1 then
DynSQL := DynSQL ||chr(13)||chr(10)|| ' UNION ALL ';
end if;
end loop;
finale := createview || DynSQL;
finale := finale|| ')';
execute immediate finale;
end VIEW_PROC;
开始时您必须添加 create or replace procedure VIEW_PROC is
、删除 declare
并在末尾 END
关键字后添加过程名称 VIEW_PROC
。
我有这个 PL/SQL 块,每次我 运行 它都会创建一个视图。 我想将它更改为名称为 "VIEW_PROC" 的存储过程,这样每次我想创建视图时我只需要 运行 proc。 我该怎么做?
set serveroutput on
declare
compte number;
DQEntity varchar2(50);
DynSQL varchar2(4000);
finale varchar2(4000);
v1 varchar2(40):='''DD-MM-YY''';
createview varchar2(4000) := 'CREATE OR REPLACE FORCE EDITIONABLE VIEW "DV2_OBIDMT"."F_GENERAL_DATA_QLTY3" ("SRC_SYS_ID", "SOFT_RULE_NAME", "ENTITY_NAME", "DATE_", "PASSES", "FAILS") AS (';
begin
select COUNT(*) into compte
from DV2_OBIADM.IM_LUT_ENTITY_SOFT_RULES;
for ins in (select ENTITY_NAME as Q1
from DV2_OBIADM.IM_LUT_ENTITY_SOFT_RULES
)
loop
DQEntity:= ins.Q1;
DynSQL := DynSQL || 'select
SRC.SRC_SYS_ID,
EN.SOFT_RULE_NAME,
EN.ENTITY_NAME,
(to_date(to_char(SRC.LDTS,'||v1||'))) as date_,
sum(case when SRC.QLTY_TEST= '||'''Pass'''||' then 1 else 0 end) as Passes,
sum(case when SRC.QLTY_TEST= '||'''Fail'''||' then 1 else 0 end) as Fails
from "DV2_OBIADM".IM_LUT_ENTITY_SOFT_RULES EN, ' ||DQEntity|| ' SRC
WHERE EN.ENTITY_NAME = ''' || DQEntity || '''
GROUP BY SRC.SRC_SYS_ID, EN.ENTITY_NAME, EN.SOFT_RULE_NAME,(to_date(to_char(SRC.LDTS,'||v1||'))) ' ;
compte := compte -1;
if compte >= 1 then
DynSQL := DynSQL ||chr(13)||chr(10)|| ' UNION ALL ';
end if;
end loop;
finale := createview || DynSQL;
finale := finale|| ')';
execute immediate finale;
end;
感谢您的帮助!
这是创建存储过程的代码:
create or replace procedure VIEW_PROC is
compte number;
DQEntity varchar2(50);
DynSQL varchar2(4000);
finale varchar2(4000);
v1 varchar2(40):='''DD-MM-YY''';
createview varchar2(4000) := 'CREATE OR REPLACE FORCE EDITIONABLE VIEW "DV2_OBIDMT"."F_GENERAL_DATA_QLTY3" ("SRC_SYS_ID", "SOFT_RULE_NAME", "ENTITY_NAME", "DATE_", "PASSES", "FAILS") AS
(';
begin
select COUNT(*) into compte
from DV2_OBIADM.IM_LUT_ENTITY_SOFT_RULES;
for ins in (
select ENTITY_NAME as Q1
from DV2_OBIADM.IM_LUT_ENTITY_SOFT_RULES
) loop
DQEntity:= ins.Q1;
DynSQL := DynSQL || 'select
SRC.SRC_SYS_ID,
EN.SOFT_RULE_NAME,
EN.ENTITY_NAME,
(to_date(to_char(SRC.LDTS,'||v1||'))) as date_,
sum(case when SRC.QLTY_TEST= '||'''Pass'''||' then 1 else 0 end) as Passes,
sum(case when SRC.QLTY_TEST= '||'''Fail'''||' then 1 else 0 end) as Fails
from "DV2_OBIADM".IM_LUT_ENTITY_SOFT_RULES EN, ' ||DQEntity|| ' SRC
WHERE EN.ENTITY_NAME = ''' || DQEntity || '''
GROUP BY SRC.SRC_SYS_ID, EN.ENTITY_NAME, EN.SOFT_RULE_NAME,(to_date(to_char(SRC.LDTS,'||v1||'))) ' ;
compte := compte -1;
if compte >= 1 then
DynSQL := DynSQL ||chr(13)||chr(10)|| ' UNION ALL ';
end if;
end loop;
finale := createview || DynSQL;
finale := finale|| ')';
execute immediate finale;
end VIEW_PROC;
开始时您必须添加 create or replace procedure VIEW_PROC is
、删除 declare
并在末尾 END
关键字后添加过程名称 VIEW_PROC
。