【发布时间】:2020-02-12 13:41:05
【问题描述】:
我是 PL/SQL 和 oracle 的新手,我正在针对 Oracle 12C 数据库使用 SQL developer 19。 正如我以前在 T-SQL 中所做的那样,我要做的就是从日期字段值介于两个存储过程 ate 参数之间的表中选择一些数据;在我使用的存储过程下面给我一个错误,说我必须“SELECT INTO”?
create or replace PROCEDURE GET_DMR_HALO_VALUES ( START_DATE IN DATE , END_DATE IN DATE )
AS
BEGIN
SELECT
HALO_RECORD_ID ,
ASSET_ID ,
ASSET_NAME ,
NUMERIC_VALUE ,
IS_ENABLED ,
ADDED_BY ,
VALUE_DATE ,
NOTES ,
DATE_ADDED
FROM halo_inputs
WHERE trunc(value_date) BETWEEN START_DATE and END_DATE;
END GET_DMR_HALO_VALUES;
那么我还有另一个问题......假设上述工作我试图通过调用SQL开发人员中的存储过程来查看返回的表数据,如下所示
DEFINE START_DATE date := TO_DATE('2019-02-12','YYYY-DD-MM');
DEFINE END_DATE date := TO_DATE('2019-02-12','YYYY-DD-MM');
exec GET_DMR_HALO_VALUES(:START_DATE, :END_DATE );
像上面这样调用 SP 是否正确?
更新
看了这个stack-over article 我将存储过程更改如下
create or replace PROCEDURE GET_DMR_HALO_VALUES ( START_DATE IN DATE , END_DATE IN DATE )
AS
c1 sys_refcursor;
BEGIN
open c1 for
SELECT
HALO_RECORD_ID ,
ASSET_ID ,
ASSET_NAME ,
NUMERIC_VALUE ,
IS_ENABLED ,
ADDED_BY ,
VALUE_DATE ,
NOTES ,
DATE_ADDED
FROM halo_inputs
WHERE trunc(value_date) BETWEEN START_DATE and END_DATE;
dbms_sql.return_result(c1);
END;
但是游标是 Oracle 中获取表数据的唯一方法吗?
更新 2 我还更改了执行查询如下
DECLARE
START_DATE date := TO_DATE('12-02-20','DD-MM-YY');
END_DATE date := TO_DATE('12-02-20','DD-MM-YY');
BEGIN
GET_DMR_HALO_VALUES(START_DATE,END_DATE );
END;
它可以工作,但是我如何让 SQL 开发人员在网格视图中而不是纯文本中显示数据?
【问题讨论】:
标签: oracle stored-procedures plsql oracle-sqldeveloper