在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中 存储过程如何调用存储过程?的主要内容,如果未能解决你的问题,请参考以下文章

SQL存储过程如何调用存储过程?

oracle存储过程里调用存储过程

oracle 存储过程中调用存储过程

Oracle如何创建存储过程和如何调用存储过程

Oracle:如何使用 if 条件在存储过程中调用存储过程

怎样在sql语句中oracle调用存储过程