PL/SQL:声明变量并选择条件取决于变量的表

问题描述 投票:0回答:1

什么是最简单的方法,我可以创建一个 PL/SQL 查询

  1. 声明一些变量,例如一个
    date='30Sep2022'
    和一个
    id=2000
  2. 从条件表中选择数据
    col_date = date and col_id = id
variables plsql conditional-statements plsqldeveloper declare
1个回答
0
投票

您特别要求 PL/SQL,它是 Oracle 对 SQL 的过程扩展。在里面,你不能只是“

SELECT
”;它必须是“
SELECT INTO
something(变量,集合,参考光标,等等)。

你没有用“最简单”的方式解释你的意思;其中之一是创建一个返回 ref cursor 的函数,而“变量”作为其参数传递:

SQL> CREATE OR REPLACE FUNCTION f_test (par_datum IN DATE, par_id IN NUMBER)
  2     RETURN SYS_REFCURSOR
  3  IS
  4     rc  SYS_REFCURSOR;
  5  BEGIN
  6     OPEN rc FOR SELECT *
  7                   FROM test
  8                  WHERE     datum = par_datum
  9                        AND id = par_id;
 10
 11     RETURN rc;
 12  END f_test;
 13  /

Function created.

SQL>
SQL> SELECT f_test (DATE '2023-03-13', 10) result FROM DUAL;

RESULT
--------------------
CURSOR STATEMENT : 1

CURSOR STATEMENT : 1

     EMPNO         ID ENAME      JOB       DATUM
---------- ---------- ---------- --------- --------
      7782         10 CLARK      MANAGER   13.03.23
      7839         10 KING       PRESIDENT 13.03.23


SQL>

另一种选择是在支持它们的工具中使用变量;例如,SQL*Plus。它的缺点是你不能声明数据类型为

DATE
的变量,所以你依赖隐式数据类型转换或者必须使用处理它的函数。

SQL> var par_id number
SQL> var par_datum varchar2(10)
SQL>
SQL> exec :par_id := 20

PL/SQL procedure successfully completed.

SQL> exec :par_datum := '13.03.2023'

PL/SQL procedure successfully completed.

SQL> select * from test
  2  where id = :par_id
  3    and datum = to_date(:par_datum, 'dd.mm.yyyy');

     EMPNO         ID ENAME      JOB       DATUM
---------- ---------- ---------- --------- --------
      7369         20 SMITH      CLERK     13.03.23
      7788         20 SCOTT      ANALYST   13.03.23
      7902         20 FORD       ANALYST   13.03.23

SQL>
© www.soinside.com 2019 - 2024. All rights reserved.