指点成金-最美分享吧

登录

plsql中如何执行存储过程?

佚名 举报

篇首语:本文由小编为大家整理,主要介绍了plsql中如何执行存储过程?相关的知识,希望对你有一定的参考价值。

请教下,如何在plsql中执行一个存储过程?

我写了一个存储过程如下:主要目的是我会用定时任务去调用这个存储过程,
create or replace procedure job_table as
begin

create table job_test2 as select * from job_test;

commit;

EXCEPTION WHEN OTHERS
THEN
rollback;
end;
/
先帮忙看下这个存储过程是否有语法错误?我创建好后为什么看存储过程那有个小红叉?编译为什么没通过?
创建好存储过程后怎么调用执行?在plsql中,我用
exec 和execute这2个命令都不行。

实现的方法和详细的操作步骤如下:

1、第一步,双击plsql图标进入登录界面,输入用户名和密码,然后传输数据库实例名称,如下图所示,然后进入下一步。

2、其次,完成上述步骤后,单击左上角的“new”选项,然后单击“sql window”以进入数据库界面,如下图所示,然后进入下一步。

3、接着,该图是数据库存储过程的简单布局。

存在存储过程的定义,包括输入变量,输出变量等。输入变量由in定义,输出由out定义;可变部分:可以根据程序要求定义;数据处理逻辑部分:诸如添加,删除和修改差异表之类的操作;异常处理部分:处理程序异常执行时的处理。

如下图所示,然后进入下一步。

4、然后,完成上述步骤后,编写存储过程时,需要单击左上角的执行按钮或快捷键F8,然后可以在编译后调试程序。找到需要调试的存储过程,右键单击“test”,进入调试界面,如下图所示,然后进入下一步。

5、随后,完成上述步骤后,单击左上角的调试按钮,如下图所示,然后进入下一步。

6、最后,完成上述步骤后,下图中标记的区域是调试按钮,可以单步执行,跳过整个部分或跳出,如下图所示。这样,问题就解决了。

参考技术A 要成功执行这个存储过程,你需要注意几点:
1.select * from ods_area; 不能直接在pl/sql 中作为语句执行。
应该用 select 字段 into plsql变量 from 表名;
的形式来获取表中的数据,保存到plsql变量中。

2. 存储过程的语法格式为:
create or replace procedure area
is
--变量声明;
begin
--过程主体;
end area;
3. 如果存储过程代码无误,可以通过 "/" 来执行代码,编译存储过程。
4.通过exec 或 execute 来调用编译后的存储过程。

例如:

-- 创建procedure:
create or replace procedure area
is
num number ;
v_areaRecord dual%ROWTYPE;
begin
--例子1
select * into v_areaRecord from dual;
--例子2
select 12345 into num from dual;
end area;
/
-- 通过 / 执行;

--调用
exec area;
参考技术B create or replace procedure job_table as
v_sql varchar2(2000);
begin
  v_sql:="create table job_test2 as select * from job_test";
  EXECUTE immediate v_sql;
  EXCEPTION 
    WHEN OTHERS
      THEN
        rollback;
end job_table;

 存储过程内不能直接使用create或alter,需要使用EXECUTE执行动态语句才可以

还有执行存储过程,必须在命令窗口内执行

追问

嗯,说的很清楚,我在请教2个问题

1:如何设置一个定时任务,每个小时执行一下这个存储过程?
2: 假如job_test表里的数据在变化,存储过程怎么改下,能保证 job_test2 表里的数据每隔一个小时和job_test同步?sql怎么写?先drop 在创建?数据量比较大怎么办?

追答

1设置job和schedule 定时执行,我不是dba这个不了解
2 可以考虑使用触发器,当job_test某行的值发生变化或删除,时触发即可

至于SQL百度一下job、schedule、触发器,示例很多,而且还是需要考虑业务逻辑,
如果使用触发器功能1就没必要了,如果使用功能1,定期执行也就可以了 功能2也就没必要了

本回答被提问者采纳
参考技术C OUT 参数需要设置一个变量接收返回值

执行:
declare
test sys_refcursor
begin
wyl_sp1(test);
dbms_output.put_line(test);
end;
请采纳。追问

我这个存储过程只是一个将另外一个表里的数据查出来,然后插入另外一个表或者是创建一个新表。没有入参和出参。

参考技术D 贴一下错误提示,先编译通过再去执行。追问

    追答

    在命令窗口执行。不是SQL窗口。

    以上是关于plsql中如何执行存储过程?的主要内容,如果未能解决你的问题,请参考以下文章