oracle 存储怎么使用,如何使用Oracle SQL开发人员运行存储过程?

不仅有办法做到这一点,还有不止一种方式来做(这个我承认的并不是很好,但sql * Developer是用Java编写的)。

我有一个具有此签名的过程:get_maxsal_by_dept(dno number,maxsal out number)。

我在sql * Developer Object Navigator中突出显示它,调用右键菜单并选择Run。 (我可以使用ctrl F11。)这产生了一个带有测试工具的弹出窗口。 (注意:如果存储过程存在于包中,则需要右键单击包,而不是包含过程名称的包下方的图标;然后,在测试时将从包的“目标”列表中选择sproc在此示例中,测试工具将显示以下内容:

DECLARE

DNO NUMBER;

MAXSAL NUMBER;

BEGIN

DNO := NULL;

GET_MAXSAL_BY_DEPT(

DNO => DNO,MAXSAL => MAXSAL

);

DBMS_OUTPUT.PUT_LINE('MAXSAL = ' || MAXSAL);

END;

我将变量DNO设置为50并按OK。在“运行 – 日志”窗格(右下角除非已经关闭/移动/隐藏它),我可以看到以下输出:

Connecting to the database apc.

MAXSAL = 4500

Process exited.

Disconnecting from the database apc.

为了公平,跑步者对返回参考游标的功能不太友好,像这样:get_emps_by_dept(dno number)return sys_refcursor。

DECLARE

DNO NUMBER;

v_Return sys_refcursor;

BEGIN

DNO := 50;

v_Return := GET_EMPS_BY_DEPT(

DNO => DNO

);

-- Modify the code to output the variable

-- DBMS_OUTPUT.PUT_LINE('v_Return = ' || v_Return);

END;

然而,至少它提供了保存任何文件更改的机会,所以我们可以保留对调整线束的投资。

DECLARE

DNO NUMBER;

v_Return sys_refcursor;

v_rec emp%rowtype;

BEGIN

DNO := 50;

v_Return := GET_EMPS_BY_DEPT(

DNO => DNO

);

loop

fetch v_Return into v_rec;

exit when v_Return%notfound;

DBMS_OUTPUT.PUT_LINE('name = ' || v_rec.ename);

end loop;

END;

同一位置的输出:

Connecting to the database apc.

name = TRICHLER

name = VERREYNNE

name = FEUERSTEIN

name = PODER

Process exited.

Disconnecting from the database apc.

或者,我们可以在sqlDeveloper工作表中使用旧的sqlPLus命令:

var rc refcursor

exec :rc := get_emps_by_dept(30)

print rc

在这种情况下,输出将显示在“脚本输出”窗格中(默认位置是“结果”选项卡右侧的选项卡)。

IDE的最早版本不支持sql * Plus的方式。但是,自1.2.1以来,所有上述命令都得到了支持。有关更多信息,请参阅the matrix in the online documentation。

“When I type just var rc refcursor;

and select it and run it,I get this

error (GUI):”

工作表解释sqlPlus命令的方式存在一个特征或错误。它假定sqlPlus命令是脚本的一部分。因此,如果我们输入一行sql * Plus,则说var rc refcursor,然后单击Execute Statement(或F9),工作表会引发ORA-900,因为它不是可执行语句,即它不是sql。我们需要做的是单击运行脚本(或F5),即使是单行的sql * Plus。

“I am so close … please help.”

您的程序是一个具有五个必需参数签名的过程。你收到一个错误,因为你把它称为一个函数,只有一个参数:

exec :rc := get_account(1)

你需要的是如下所示。为了清楚起见,我使用了命名符号。

var ret1 number

var tran_cnt number

var msg_cnt number

var rc refcursor

exec :tran_cnt := 0

exec :msg_cnt := 123

exec get_account (Vret_val => :ret1,Vaccount_id => 1,rc1 => :rc )

print tran_count

print rc

也就是说,每个OUT或IN OUT参数都需要一个变量。 IN参数可以作为文字传递。前两个EXEC语句将值分配给几个IN OUT参数。第三个EXEC调用该过程。过程不返回值(与函数不同),因此我们不使用赋值语法。最后,该脚本显示映射到OUT参数的两个变量的值。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值