在oracle中 存储过程如何调用存储过程?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在oracle中 存储过程如何调用存储过程?相关的知识,希望对你有一定的参考价值。
在存储过程中直zd接使用就行了--创建回一个存储答过程
CREATE
OR
REPLACE
PROCEDURE
PR_NEW1
(N_NAME
VARCHAR2)
as
begin
DBMS_OUTPUT.PUT_LINE(N_NAME);
end
;
--在另一个存储过程中调用
CREATE
OR
REPLACE
PROCEDURE
PR_NEW2
as
begin
PR_NEW1('NAME');
---
end
; 参考技术A 从
open
p_cursor
for
sqlstr
这句可以看到,你的p_cursor
一定是作为输出
在调用的时候,只要拿个游标去接收查询结果就可以了
declare
p_cursor
sys_refcursor;
begin
pro_lz_manager(p_cursor);
end;
如果想处理游标返回的结果,用循环取出游标即可
Oracle:如何使用 if 条件在存储过程中调用存储过程
【中文标题】Oracle:如何使用 if 条件在存储过程中调用存储过程【英文标题】:Oracle: How to call a stored procedure within a stored procedure with if-condition 【发布时间】:2019-06-17 15:27:03 【问题描述】:我必须在带有 if 条件的过程(“A”)中调用一个过程(“B”)(在 Oracle 10g 中)。但我无法让它工作。
过程“B”从多个表中收集数据并将其写入 xml 文件。如果我无条件调用“B”,它会写入文件。但无论是否有数据,它都会写入文件(带有 xml-Header)。所以我需要 if 条件来检查数据。
代码:
CREATE OR REPLACE PROCEDURE A
AS
l_count varchar2(3);
CURSOR c_EXISTSDATA IS
select count(*) into l_count from bv.history where upddate > sysdate -.015 and tabelle = 'MEDIEN' and userid != 'DATENTAUSH';
BEGIN
IF (l_count != 0)
THEN
B;
END IF;
END;
/
有了这个 if 条件,根本就没有输出 - 如果 l_count !=0 也是如此。这里有什么问题?
感谢您的帮助! 问候克里斯托夫
【问题讨论】:
首先将l_count
局部变量转换为pls_integer
类型。但对于其余的,没有数据我们无法知道。
声明游标不会获取任何结果。您需要实际获取它。顺便说一句,PL/SQL 中的 if
条件周围没有括号 - 它有 then
关键字。
【参考方案1】:
VARCHAR2
不是存储数字数据的好选择。我建议您使用数据类型NUMBER
定义l_count
。此外,您定义了一个游标,但您从不执行它。你可以试试:
CREATE OR REPLACE PROCEDURE A
AS
l_count NUMBER;
BEGIN
select count(*)
into l_count
from bv.history
where upddate > sysdate - INTERVAL '20' MINUTE and
tabelle = 'MEDIEN' and
userid != 'DATENTAUSH';
IF l_count != 0 THEN
B;
END IF;
END;
我不确定您所说的 0.015
是什么时间间隔。这相当于 21.6 分钟,所以我将其更改为(更清晰的)INTERVAL '20' MINUTE
。根据需要进行调整。
我想你会发现这个效果更好。
【讨论】:
谢谢你,鲍勃 - 和其他人!我对 pl/sql 不是很熟悉(你可能已经猜到了......)。没有光标(我还没有看到树木的木材)该程序有效。 BR克里斯托夫以上是关于在oracle中 存储过程如何调用存储过程?的主要内容,如果未能解决你的问题,请参考以下文章