plsql中如何执行存储过程?

请教下,如何在plsql中执行一个存储过程?我写了一个存储过程如下:主要目的是我会用定时任务去调用这个存储过程,createorreplaceprocedurejob_t... 请教下,如何在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个命令都不行。
展开
 我来答
59分粑粑分享生活
高粉答主

2020-04-01 · 专注生活好物分享,解答日常方方面面的问题
59分粑粑分享生活
采纳数:326 获赞数:119834

向TA提问 私信TA
展开全部

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

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

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

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

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

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

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

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

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

百度网友19c5533fd
2010-07-07 · TA获得超过2389个赞
知道小有建树答主
回答量:465
采纳率:0%
帮助的人:627万
展开全部
要成功执行这个存储过程,你需要注意几点:
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;
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友e7b6a5ad0
推荐于2017-09-27 · TA获得超过175个赞
知道小有建树答主
回答量:222
采纳率:100%
帮助的人:209万
展开全部
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也就没必要了
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
TUBER727
2014-07-16 · TA获得超过428个赞
知道小有建树答主
回答量:351
采纳率:100%
帮助的人:113万
展开全部
贴一下错误提示,先编译通过再去执行。
追问

追答
在命令窗口执行。不是SQL窗口。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
月殇倾城榒R
2014-07-16 · TA获得超过105个赞
知道答主
回答量:113
采纳率:50%
帮助的人:123万
展开全部
OUT 参数需要设置一个变量接收返回值

执行:
declare
test sys_refcursor
begin
wyl_sp1(test);
dbms_output.put_line(test);
end;
请采纳。
追问
我这个存储过程只是一个将另外一个表里的数据查出来,然后插入另外一个表或者是创建一个新表。没有入参和出参。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式