【发布时间】:2019-10-15 17:19:19
【问题描述】:
我有这个 SQL 查询:
select title
from DEPARTMENT;
我尝试写一个存储过程:
create PROCEDURE select_some
(whats VARCHAR2 ,c_select_some OUT SYS_REFCURSOR)
AS
BEGIN
OPEN c_select_some FOR
SELECT whats
FROM department;
END select_some;
/
但是在我使用“title”参数执行它的地方,我得到了 8 行带有“title”而不是实际内容的行。怎么了?
执行:
var whats varchar2(20)
variable whats = 'Title'
variable mycursor refcursor;
exec select_some (:whats, mycursor);
【问题讨论】:
-
SELECT whats=SELECT 'Title',因为过程的whats参数被赋予Title参数(variable whats = 'Title'),这就是为什么将返回尽可能多的值为Title的行department表中的行。你到底想完成什么?如果你想动态传递列名,你应该看看动态 SQL -
只需从 DEPARTMENT 中选择 some_param;这将返回 8 行,我只想要参数化的 sql 查询
-
这不是“参数化 sql 查询”的意思。如前所述,您想要的是“动态 SQL”。
标签: oracle stored-procedures plsql