简单的oracle存储过程

洗洗就敲代码 2014-01-14 07:48:57
CREATE OR REPLACE PROCEDURE p_student1
AS
V_TOTAL NUMBER(10);
BEGIN
SELECT COUNT(*) INTO V_TOTAL FROM student1;
DBMS_OUTPUT.PUT_LINE('总数为:'||V_TOTAL);
END;



如上我在oracle中创建了这个简单的存储过程,那么我该如何调用这个存储过程?我试了execute p_student1和exec p_student1但均提示无效的sql语句。请问我该怎么写才能调用这个存储过程?
...全文
749 20 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
yuyeyi 2014-11-18
  • 打赏
  • 举报
回复
plsql中。命令窗口执行exec p_student1
ffshao 2014-11-18
  • 打赏
  • 举报
回复
引用 18 楼 ning_wnn2014 的回复:
[quote=引用 3 楼 xiaolingdang0802 的回复:] 可以select 过程名(参数) from dual
以上是函数的调用方式。 用如下方式调用调用存储过程: BEGIN P_STUDENT1; END;[/quote] 可以用call P_STUDENT1();的方式调用,注意,如果不带出参和入参,后面的那个()也不能省。
引用 17 楼 zlloct 的回复:
[quote=引用 16 楼 u013147536 的回复:] [quote=引用 15 楼 zlloct 的回复:] [quote=引用 12 楼 u013147536 的回复:] [quote=引用 1 楼 zlloct 的回复:] 在命令行执行: set serveroutput on; execute P_STUDENT1;
那么如果我要写一个带参数的存储过程,用来查询的时候用,那么我该怎么写?[/quote] 查询的时候一般用function,因为function本身就能返回一个值[/quote]比如我有一张表A,里面有字段id varchar2,num varchar2,name vachar2 ,因为这张表里面的数据是死的,所以我想要写一个存储过程。当有select * from A where id = ?;返回符合id条件的所有数据。请问这个时候我该怎么写存储过程?求完整的语句。[/quote] 将TGP_FUNDS换成你自己的表
CREATE OR REPLACE PROCEDURE TEST(PI_FND_ID VARCHAR2,
                                 PO_CUR    OUT SYS_REFCURSOR) IS
BEGIN
  OPEN PO_CUR FOR
    SELECT * FROM TGP_FUNDS T WHERE T.FND_ID = PI_FND_ID;
END TEST;
使用存储过程:
declare 
 R1 TGP_FUNDS%ROWTYPE; 
 rc sys_refcursor; 
 begin 
 test('MPGF',rc); 
 fetch rc into R1; 
 while rc%found loop 
 dbms_output.put_line(R1.FND_ID); 
 fetch rc into R1; 
 end loop; 
 end;
[/quote] 如果查找的数据有多条的话,使用游标比较方便。
ning_wnn2014 2014-11-12
  • 打赏
  • 举报
回复
引用 3 楼 xiaolingdang0802 的回复:
可以select 过程名(参数) from dual
以上是函数的调用方式。 用如下方式调用调用存储过程: BEGIN P_STUDENT1; END;
CT_LXL 2014-02-17
  • 打赏
  • 举报
回复
引用 16 楼 u013147536 的回复:
[quote=引用 15 楼 zlloct 的回复:] [quote=引用 12 楼 u013147536 的回复:] [quote=引用 1 楼 zlloct 的回复:] 在命令行执行: set serveroutput on; execute P_STUDENT1;
那么如果我要写一个带参数的存储过程,用来查询的时候用,那么我该怎么写?[/quote] 查询的时候一般用function,因为function本身就能返回一个值[/quote]比如我有一张表A,里面有字段id varchar2,num varchar2,name vachar2 ,因为这张表里面的数据是死的,所以我想要写一个存储过程。当有select * from A where id = ?;返回符合id条件的所有数据。请问这个时候我该怎么写存储过程?求完整的语句。[/quote] 将TGP_FUNDS换成你自己的表
CREATE OR REPLACE PROCEDURE TEST(PI_FND_ID VARCHAR2,
                                 PO_CUR    OUT SYS_REFCURSOR) IS
BEGIN
  OPEN PO_CUR FOR
    SELECT * FROM TGP_FUNDS T WHERE T.FND_ID = PI_FND_ID;
END TEST;
使用存储过程:
declare 
 R1 TGP_FUNDS%ROWTYPE; 
 rc sys_refcursor; 
 begin 
 test('MPGF',rc); 
 fetch rc into R1; 
 while rc%found loop 
 dbms_output.put_line(R1.FND_ID); 
 fetch rc into R1; 
 end loop; 
 end;
洗洗就敲代码 2014-02-17
  • 打赏
  • 举报
回复
引用 15 楼 zlloct 的回复:
[quote=引用 12 楼 u013147536 的回复:] [quote=引用 1 楼 zlloct 的回复:] 在命令行执行: set serveroutput on; execute P_STUDENT1;
那么如果我要写一个带参数的存储过程,用来查询的时候用,那么我该怎么写?[/quote] 查询的时候一般用function,因为function本身就能返回一个值[/quote]比如我有一张表A,里面有字段id varchar2,num varchar2,name vachar2 ,因为这张表里面的数据是死的,所以我想要写一个存储过程。当有select * from A where id = ?;返回符合id条件的所有数据。请问这个时候我该怎么写存储过程?求完整的语句。
Rotel-刘志东 2014-02-08
  • 打赏
  • 举报
回复
如果在sql*plus set serveroutput on ;
洗洗就敲代码 2014-02-08
  • 打赏
  • 举报
回复
引用 1 楼 zlloct 的回复:
在命令行执行: set serveroutput on; execute P_STUDENT1;
那么如果我要写一个带参数的存储过程,用来查询的时候用,那么我该怎么写?
CT_LXL 2014-02-08
  • 打赏
  • 举报
回复
引用 12 楼 u013147536 的回复:
[quote=引用 1 楼 zlloct 的回复:] 在命令行执行: set serveroutput on; execute P_STUDENT1;
那么如果我要写一个带参数的存储过程,用来查询的时候用,那么我该怎么写?[/quote] 查询的时候一般用function,因为function本身就能返回一个值
断不了的弦 2014-02-08
  • 打赏
  • 举报
回复
用job定时跑也可以,其他的见楼上
Super_JerryLi 2014-01-21
  • 打赏
  • 举报
回复
引用 3 楼 xiaolingdang0802 的回复:
可以select 过程名(参数) from dual
赞成
ap0805319999 2014-01-20
  • 打赏
  • 举报
回复
SET SERVEROUTPUT ON BEGIN P_STUDENT1; END; 或者 SET SERVEROUTPUT ON EXEC P_STUDENT1;
铁腿水上漂 2014-01-18
  • 打赏
  • 举报
回复
begin P_STUDENT1; end;
善若止水 2014-01-18
  • 打赏
  • 举报
回复
引用 1 楼 zlloct 的回复:
在命令行执行: set serveroutput on; execute P_STUDENT1;
很标准的做法
_拙计 2014-01-17
  • 打赏
  • 举报
回复
sqlplus 中set serveroutput on;execute P_STUDENT1; plsql 你可以右键测试,或者新建命令窗口(而不是sql窗口)输上面的sql
  • 打赏
  • 举报
回复
可以select 过程名(参数) from dual
程序猿_死神 2014-01-17
  • 打赏
  • 举报
回复
NIan_jun 2014-01-17
  • 打赏
  • 举报
回复
引用 3 楼 xiaolingdang0802 的回复:
可以select 过程名(参数) from dual
你这是function 的用法,存储过程不能这样调用。
流浪川 2014-01-17
  • 打赏
  • 举报
回复
命令窗口使用 execute 查询或者程序段中,直接使用即可。。
阿三 2014-01-14
  • 打赏
  • 举报
回复
CREATE TABLE student1(ID INT); INSERT INTO student1 VALUES(1); INSERT INTO student1 VALUES(2); CREATE OR REPLACE PROCEDURE p_student1 AS V_TOTAL NUMBER(10); BEGIN SELECT COUNT(*) INTO V_TOTAL FROM student1; DBMS_OUTPUT.PUT_LINE('总数为:'||V_TOTAL); END; Connected to Oracle Database 11g Enterprise Edition Release 11.2.0.2.0 Connected as ******************* SQL> SET serveroutput ON; SQL> EXEC p_student1; 总数为:2 PL/SQL procedure successfully completed SQL>
CT_LXL 2014-01-14
  • 打赏
  • 举报
回复
在命令行执行: set serveroutput on; execute P_STUDENT1;

17,382

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 基础和管理
社区管理员
  • 基础和管理社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧