【问题标题】:oracle: Procedure with caseoracle:带案例的过程
【发布时间】:2014-07-23 11:31:08
【问题描述】:

为什么这个程序不起作用? 我试图通过游标获取表的行:AF_EMPLOYEE,这将使用 ASC/DESC 排序(根据情况)。

Create or Replace Procedure return_rows_EMPLOYEE (in_order in number, 
in_sorting in VARCHAR2, in_job in VARCHAR2, out_cursor OUT SYS_REFCURSOR) As
Begin
  OPEN out_cursor for
  select * from AF_EMPLOYEE
  WHERE EMPL_JOB_TITLE = in_job
  ORDER BY in_sorting
  CASE in_order
  WHEN 1 THEN   ASC
  ELSE  DESC
  END
End; 

【问题讨论】:

  • 请添加更多问题描述。
  • 所以,in_order=1 应该是 ASC,否则是 DESC。您要对哪一列进行排序?

标签: oracle sql-order-by case procedure


【解决方案1】:

如果排序列是数字,可以用case取反,但这不是好代码!

CREATE OR REPLACE PROCEDURE return_rows_EMPLOYEE (in_order in number, 
in_sorting in VARCHAR2, in_job in VARCHAR2, out_cursor OUT SYS_REFCURSOR) As
Begin
  OPEN out_cursor for
  select * from AF_EMPLOYEE
  WHERE EMPL_JOB_TITLE = in_job
  ORDER BY 
    CASE in_sorting WHEN 'ASC'  THEN  sort_column 
                    WHEN 'DESC' THEN -sort_column 
     END;
END; 
/

【讨论】:

    【解决方案2】:
    Create or Replace Procedure return_rows_EMPLOYEE (in_order in number, 
    in_sorting in VARCHAR2, in_job in VARCHAR2, out_cursor OUT SYS_REFCURSOR) As
    Begin
      if in_order = 1 THEN
         OPEN out_cursor for
         select * from AF_EMPLOYEE
         WHERE EMPL_JOB_TITLE = in_job
         ORDER BY in_sorting ASC
      else
         OPEN out_cursor for
         select * from AF_EMPLOYEE
         WHERE EMPL_JOB_TITLE = in_job
         ORDER BY in_sorting DESC
      end if;
    End; 
    

    更新 试试这个:

    Create or Replace Procedure return_rows_EMPLOYEE (in_order in number, 
    in_sorting in VARCHAR2, in_job in VARCHAR2, out_cursor OUT SYS_REFCURSOR) As
    Begin
      OPEN out_cursor for
      select * from AF_EMPLOYEE
      WHERE EMPL_JOB_TITLE = in_job
      ORDER BY 
      case when in_order = 1 then
          in_sorting 
      end,
      case when in_order <> 1 then
          in_sorting
      end desc;
    End; 
    

    【讨论】:

    • 谢谢。但是我需要 Case,这可能吗? @paubo147
    • 这也不起作用。我收到此错误:错误(6,6):PL/SQL:SQL 语句被忽略错误(9,3):PL/SQL:ORA-00933:SQL 命令未正确结束错误(15,4):PLS-00103:遇到符号“;”预期以下情况之一时:如果
    • 改变了!告诉我,如果它有效。我现在无法访问数据库来测试它。
    • @paubo147 ...无法访问数据库...,可能是 sqlfiddle.com 可以提供帮助吗?
    • @paubo147 我加了一个“;”在线订购后,它的工作,谢谢!
    猜你喜欢
    • 1970-01-01
    • 2017-08-30
    • 1970-01-01
    • 2023-03-07
    • 1970-01-01
    • 2020-07-02
    • 2018-11-29
    • 1970-01-01
    • 2016-05-13
    相关资源
    最近更新 更多