什么是最简单的方法,我可以创建一个 PL/SQL 查询
date='30Sep2022'
和一个id=2000
col_date = date and col_id = id
您特别要求 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>