oracle 中用啥命令执行一个带参数的存储过程

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了oracle 中用啥命令执行一个带参数的存储过程相关的知识,希望对你有一定的参考价值。

具体如下:

1、第一步,创建一个新的存储过程,见下图,转到下面的步骤。

2、第二步,完成上述步骤后,修改存储过程。
 此存储过程具有一个输入参数(pid)和一个输出参数,即通过用户id查询用户名并返回名称,见下图,转到下面的步骤。

3、第三步,完成上述步骤后,调试存储过程,找到新创建的存储过程,右键单击[test]按钮,见下图,转到下面的步骤。

4、第四步,完成上述步骤后,修改id值,然后单击左上角的“倒三角”按钮以开始调试,见下图,转到下面的步骤。

5、第五步,完成上述步骤后,按[CTRL +
 N]进行单步调试,按[CTRL + O]单步调试,按[CTRL + T]退出调试,或者单击调试工具进行调试,见下图,转到下面的步骤。

6、第六步,完成上述步骤后,可以在窗口底部输入变量名称,以观察变量的变化,见下图,转到下面的步骤。

7、第七步,完成上述步骤后,可以查看调试结果,见下图。这样,就解决了这个问题了。

参考技术A

    如果是命令行,比如SQLplus,可以使用exec procedure_name(参数列表); 就可以执行这个存储过程

    如果是SQL 窗口环境,可以直接使用一个匿名块执行

    declare

    变量声名.....

    begin

    procedure_name(参数列表);

    .........................

    end;

参考技术B exec procedure_name(params);行吗? 写在plsql块中,如果有返回值可以自己定义变量接收。 参考技术C

在命令窗口下执行

execute proc_name('参数1','参数2')

参考技术D declare
vout varchar2(200);
begin
user.procedure('v1','v2'.....'vn','vout');-- 用户名.过程名 v1..vn 为传入参数vout 为输出参数(如果有多个输出,则声明多个并)v1..vout的位子和过程中的参数一一对应)
commit;
end;

多线程调用oracle存储过程是不是并发执行?

我用delphi写了一个多线程的程序。主要用来实时收集数据,并经过处理后放入数据库中(多线程的),并把结果发回去。我的主要处理过程(主要是查询,判断)和写数据库都放到了存储过程中,但是发现程式执行起来对DB的负担很重,经常这个程式要占70%的cup资源。
所以我想是否多线程调用存储过程时,如果同时有多条线程要调,是否都会放到缓冲中等待前一个线程调用完了,再执行?而不是并发的执行!
请告诉我如果两个程式同时调用oracle存储过程会怎样?
大家有知道的吗?谢谢

这个问题非常简单
所谓的oracle存储过程,无非就是把大量的SQL集中在一起加入了变量循环等。

简单地看它就也就是对几个数据库对象的访问。

我们知道oracle数据库对象的访问是有锁机制的,同一时间内

只有一个用户能访问这样的对象,(最底的行级锁)

可以想象如个2个人同时对一个对象的同一个内容进行处理那

是不可能的。

锁只能被一个用户保持,这是规矩

当然这都是oracle 内部机制,如果多线程调用并非完全相同的内容,锁的竞争不是那么明显当然能够提升处理速度的。
参考技术A 并发性
是指两个或多个在同一
时间间隔
内发生。在多道程序环境下,并发性是指宏观上在一段时间内有多道程序在同时执行。但在单处理机系统中,每一个时刻CPU仅能执行一道
程序
,故微观上,这些程序是在CPU上交互执行

以上是关于oracle 中用啥命令执行一个带参数的存储过程的主要内容,如果未能解决你的问题,请参考以下文章

oracle 里面 :加上变量名是啥意思?

oracle中的存储过程,有啥作用,以及怎么在代码中使用?

oracle 存储过程调用

oracle存储过程输入参数能否为空

oracle 带参数存储过程更新

Oracle 存储过程