Oracle SQL Developer- Basic使用Job Wizard PL / SQL选择查询

时间:2017-05-15 03:12:02

标签: sql oracle plsql oracle-sqldeveloper

我一直在尝试让SQL Developer定期自动运行查询(在示例HR数据库上)。根据我的研究,我已经确定对我来说最好的选择是使用Job Wizard& PL / SQL(它调用DBMS_SCHEDULER?)。

我创建了一个“时间表”,每5分钟重复一次,名为:every_5mins

以下是我在“工作细节”部分中的内容: 职位名称:Select_Employees

职务类:SYS.DEFAULT_JOB_CLASS

作业类型:PL / SQL块

何时执行作业:计划

日程安排:SYSTEM.EVERY_5MINS

PL / SQL

CREATE OR REPLACE
PROCEDURE get_emp_rs (p_deptno IN HR.FIRST_NAME,
p_recordset OUT SYS_REFCURSOR) AS
BEGIN
OPEN p_recordset FOR
SELECT FIRST_NAME,
LAST_NAME
FROM
HR.EMPLOYEES
WHERE FIRST_NAME=p_recordset
END;
/

它返回一个错误: “当遇到下列情况之一时遇到符号”/“:(开始案例声明)......”其余部分被切断屏幕

我是否在正确的轨道上?编写它的正确方法是什么,所以查询每5分钟运行一次?我之前从未使用过Oracle SQL Developer。

提前致谢。

1 个答案:

答案 0 :(得分:2)

  

我有一个新错误:第1行,第750列PLS-00103:遇到符号“CREATE”

PL / SQL有效负载是我们希望我们的作业执行的代码。因此,您似乎尝试每五分钟安排一次存储过程的创建。调度程序期望执行PL / SQL调用,而不是DDL。

所以你需要先创建存储过程,然后启动Job向导。 PL / SQL块应该是这样的:

declare
     rc sys_refcursor;
begin
     get_emp_rs ('MAYZIE', rc);
end;

这指出了您的方案存在的根本问题:作业在后台运行。作业无法接受用户输入或显示输出。因此,虽然您的工作每五分钟运行一次,但您永远不会看到结果集。您需要一个在某处(表格,文件)写入结果的过程,可以由其他程序读取和显示。