SQL开发人员Oracle,如何调用过程?
我有过这样的经历:SQL开发人员Oracle,如何调用过程?,oracle,plsql,oracle-sqldeveloper,execute,Oracle,Plsql,Oracle Sqldeveloper,Execute,我有过这样的经历: CREATE or replace PROCEDURE proc ( P_ID IN INTEGER, NAME OUT CHAR, SURNAME OUT CHAR, TOTAL OUT CHAR ) AS BEGIN SELECT NAME, SURNAME, sum(TOTAL) AS TOT INTO NAME,SURNAME,TOTAL FROM STATISTICS, PLAYERS
CREATE or replace PROCEDURE proc
(
P_ID IN INTEGER,
NAME OUT CHAR,
SURNAME OUT CHAR,
TOTAL OUT CHAR
)
AS
BEGIN
SELECT NAME, SURNAME, sum(TOTAL) AS TOT
INTO NAME,SURNAME,TOTAL
FROM STATISTICS, PLAYERS, PERSON
WHERE STATISTICS.SID=P_ID AND PERSON.ID=PLAYERS.SID AND
STATISTICS.PLAYERS_SID=PLAYERS.SID
GROUP BY NAME,SURNAME;
END;
Select语句工作正常,但如何在Oracle中调用此过程
我试过类似的东西
EXEC proc(4);
及
但是没有成功
执行程序(4)
EXECUTE是一个SQL*Plus
命令
您有以下选项:
- 在SQL*Plus中执行
- 在匿名PL/SQL块中调用它李>
- 在SQL开发人员客户端工具中运行
SQL> variable v_ename varchar2(20);
SQL> exec get_emp(7788, :v_ename);
PL/SQL procedure successfully completed.
SQL> print v_ename;
V_ENAME
--------------------------------
SCOTT
SQL> CREATE OR REPLACE PROCEDURE get_emp(
2 i_empno IN emp.empno%TYPE,
3 o_ename OUT emp.ename%TYPE)
4 AS
5 BEGIN
6 SELECT ename INTO o_ename FROM emp WHERE empno = i_empno;
7 END;
8 /
Procedure created.
SQL> SET serveroutput ON
SQL> DECLARE
2 v_ename VARCHAR2(20);
3 BEGIN
4 get_emp(7788, v_ename);
5 dbms_output.put_line('Employee name is '||v_ename);
6 END;
7 /
Employee name is SCOTT
PL/SQL procedure successfully completed.
在匿名PL/SQL块中:
SQL> variable v_ename varchar2(20);
SQL> exec get_emp(7788, :v_ename);
PL/SQL procedure successfully completed.
SQL> print v_ename;
V_ENAME
--------------------------------
SCOTT
SQL> CREATE OR REPLACE PROCEDURE get_emp(
2 i_empno IN emp.empno%TYPE,
3 o_ename OUT emp.ename%TYPE)
4 AS
5 BEGIN
6 SELECT ename INTO o_ename FROM emp WHERE empno = i_empno;
7 END;
8 /
Procedure created.
SQL> SET serveroutput ON
SQL> DECLARE
2 v_ename VARCHAR2(20);
3 BEGIN
4 get_emp(7788, v_ename);
5 dbms_output.put_line('Employee name is '||v_ename);
6 END;
7 /
Employee name is SCOTT
PL/SQL procedure successfully completed.
在SQL Developer客户端工具中:
是否也提供了out参数?请尝试匿名块:
beginproc(4);结束代码>@DmitryBychenko不仅仅是这样,因为您还需要输出参数。您会遇到什么错误?您的过程只获取名称、姓氏和总数,而不处理它们。例如,您可以使用dbms_输出将它们打印输出。(您需要在会话的视图菜单中激活sqldeveloper中的dbms_输出以查看实际输出)PL/SQL块有语法错误,无法工作<代码>输入/输出
用于参数,不用于局部变量。谢谢您的回复,我会的try@dreamPr我添加了两个示例,以适合您的为准。请将其标记为已回答,这样也会帮助他人!我从一开始就对答案投了更高的票,但是经过所有的编辑,现在这个答案太详细了。我要撤回投票。。。开玩笑@弗洛林希塔笑:-)祝你有一个愉快的一天!感谢@Lalit Kumar B提供如此详细的回答。但当过程返回多个变量时,它是如何工作的呢?就像你在O_ENAME的例子中,如果我需要返回多个名称怎么办?