Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oracle 我可以使用带有多个值的IF语句吗?_Oracle - Fatal编程技术网

Oracle 我可以使用带有多个值的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编辑的查询原

我有一个数据库和每日表格。我想写一个过程,它将创建一个视图来合并一个月中各天的所有表。我想用31天或30天赶上几个月,用29天赶上2月。使用if语句是否有效

是否可以使用具有多个值的if语句,如下所示

 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;
/