Oracle 我可以使用带有多个值的IF语句吗?
我有一个数据库和每日表格。我想写一个过程,它将创建一个视图来合并一个月中各天的所有表。我想用31天或30天赶上几个月,用29天赶上2月。使用if语句是否有效 是否可以使用具有多个值的if语句,如下所示Oracle 我可以使用带有多个值的IF语句吗?,oracle,Oracle,我有一个数据库和每日表格。我想写一个过程,它将创建一个视图来合并一个月中各天的所有表。我想用31天或30天赶上几个月,用29天赶上2月。使用if语句是否有效 是否可以使用具有多个值的if语句,如下所示 if(upper(MON)) in ('JAN','MAR','MAY','JUL','AUG','OCT','DEC') THEN {DO SOMETHING} 考虑到您的代码有多复杂,IF的效率可能是您遇到的最小问题。我想你的公司不会突然申请许可证的。(作者注:这句话指的是OP编辑的查询原
if(upper(MON)) in ('JAN','MAR','MAY','JUL','AUG','OCT','DEC') THEN {DO SOMETHING}
考虑到您的代码有多复杂,IF的效率可能是您遇到的最小问题。我想你的公司不会突然申请许可证的。(作者注:这句话指的是OP编辑的查询原始版本中发布的代码。) 然而,你的方法行不通。在DDL中不能像那样使用IF。你需要做点别的 除非所有表都已存在,否则视图将无法编译。所以我假设您有某种形式的计划作业,它创建这些表,然后创建视图。在这种情况下,您可以将该过程从数据字典中删除(注意:未测试的代码,您可能需要修复打字错误) 这种方法意味着,只有创建表的例程才需要考虑一个月中的哪几天以及是否是闰年
更好的做法是,每年的每个月都没有单独的表格 考虑到您的代码有多复杂,IF的效率可能是您遇到的最小问题。我想你的公司不会突然申请许可证的。(作者注:这句话指的是OP编辑的查询原始版本中发布的代码。) 然而,你的方法行不通。在DDL中不能像那样使用IF。你需要做点别的 除非所有表都已存在,否则视图将无法编译。所以我假设您有某种形式的计划作业,它创建这些表,然后创建视图。在这种情况下,您可以将该过程从数据字典中删除(注意:未测试的代码,您可能需要修复打字错误) 这种方法意味着,只有创建表的例程才需要考虑一个月中的哪几天以及是否是闰年
更好的做法是,每年的每个月都没有单独的表格 考虑到您的代码有多复杂,IF的效率可能是您遇到的最小问题。我想你的公司不会突然申请许可证的。(作者注:这句话指的是OP编辑的查询原始版本中发布的代码。) 然而,你的方法行不通。在DDL中不能像那样使用IF。你需要做点别的 除非所有表都已存在,否则视图将无法编译。所以我假设您有某种形式的计划作业,它创建这些表,然后创建视图。在这种情况下,您可以将该过程从数据字典中删除(注意:未测试的代码,您可能需要修复打字错误) 这种方法意味着,只有创建表的例程才需要考虑一个月中的哪几天以及是否是闰年
更好的做法是,每年的每个月都没有单独的表格 考虑到您的代码有多复杂,IF的效率可能是您遇到的最小问题。我想你的公司不会突然申请许可证的。(作者注:这句话指的是OP编辑的查询原始版本中发布的代码。) 然而,你的方法行不通。在DDL中不能像那样使用IF。你需要做点别的 除非所有表都已存在,否则视图将无法编译。所以我假设您有某种形式的计划作业,它创建这些表,然后创建视图。在这种情况下,您可以将该过程从数据字典中删除(注意:未测试的代码,您可能需要修复打字错误) 这种方法意味着,只有创建表的例程才需要考虑一个月中的哪几天以及是否是闰年
更好的做法是,每年的每个月都没有单独的表格 我需要一年中每个月的完整表格,请以更有效的方式告知我,我需要一年中每个月的完整表格,请以更有效的方式告知我,我需要一年中每个月的完整表格,请以更有效的方式告知我,我需要一年中每个月的完整表格,请告知我有了更有效的方法,为什么会有人设计这样的表格?无意冒犯,但这是一个可怕的数据模型。我需要创建这个完整的montly表。请告诉我这些表是什么时候创建的?什么时候会创建这个视图?为什么会有人设计这样的表?无意冒犯,但这是一个可怕的数据模型。我需要创建这个完整的montly表。请告诉我这些表是什么时候创建的?什么时候会创建这个视图?为什么会有人设计这样的表?无意冒犯,但这是一个可怕的数据模型。我需要创建这个完整的montly表。请告诉我这些表是什么时候创建的?什么时候会创建这个视图?为什么会有人设计这样的表?无意冒犯,但这是一个可怕的数据模型。我需要创建这个完整的montly表。请告诉我这些表是什么时候创建的?何时创建此视图?
CREATE OR REPLACE PROCEDURE monthly_view (
MON_P VARCHAR2,
YEAR_P VARCHAR2 DEFAULT TO_CHAR (SYSDATE, 'YY'))
IS
l_stmt varchar2(32767);
BEGIN
l_stmt := 'CREATE OR REPLACE VIEW monthly_view_'|| UPPER (MON_P)|| '_'|| YEAR_P||' as ';
for r in ( select table_name from user_tables
where table_name like 'LT_'|| UPPER (MON)||'____'|| YEAR_P||'_BCH'
)
loop
if r.table_name != 'LT_'|| UPPER (MON)||'_01_'|| YEAR_P||'_BCH'
then
l_stmt := l_stmt ||' UNION ALL ';
end if;
l_stmt := l_stmt ||' SELECT * FROM '||r.table_name;
end loop;
execute immediate l_stmt;
END;
/