ITPub博客

首页 > 数据库 > Oracle > oracle 基础温习之 存储过程

oracle 基础温习之 存储过程

原创 Oracle 作者:starive 时间:2014-02-08 07:11:14 0 删除 编辑
创建一个存储过程的语法:
create [or replace] procedure 过程名
            [(参数名 [IN | OUT | IN OUT] 数据类型  ...]

{IS  | AS}
        {说明部分}
begin
         语句序列
         [exception 例外处理]
end [过程名]



  1. CREATE TABLE Student
  2.        (Sno CHAR(9) PRIMARY KEY,
  3.         Sname CHAR(20) NOT NULL,
  4.         Ssex CHAR(4),
  5.         Sage SMALLINT,
  6.         Sdept CHAR(20)) tablespace gaospace;






例子:
创建一个添加学生的存储过程。

  1. create or replace procedure addnewstudent(
  2. p_sno student.sno%type,
  3. p_sname student.sname%type,
  4. p_ssex student.ssex%type,
  5. p_sage student.sage%type,
  6. p_sdept student.sdept%type)
  7. As
  8. begin
  9. insert into student values(p_sno, p_sname, p_ssex, p_sage, p_sdept);
  10. commit;
  11. end addnewstudent;



调用:

  1. begin
  2.  addnewstudent('0209','赵利','男',21,'cs');
  3. end;




参数类型:

这里肯定是传入参数 IN: 

  1. create or replace procedure addnewstudent2(
  2. p_sno IN student.sno%type,
  3. p_sname IN student.sname%type,
  4. p_ssex IN student.ssex%type,
  5. p_sage IN student.sage%type,
  6. p_sdept IN student.sdept%type)
  7. As
  8. begin
  9. insert into student values(p_sno, p_sname, p_ssex, p_sage, p_sdept);
  10. commit;
  11. end addnewstudent2;


  12. begin
  13.  addnewstudent2('0210','赵五','男',21,'cs');
  14. end;


如果换成传出参数OUT,会怎么样了?

  1. create or replace procedure addnewstudent3(
  2. p_sno OUT student.sno%type,
  3. p_sname OUT student.sname%type,
  4. p_ssex OUT student.ssex%type,
  5. p_sage OUT student.sage%type,
  6. p_sdept OUT student.sdept%type)
  7. As
  8. begin
  9. insert into student values(p_sno, p_sname, p_ssex, p_sage, p_sdept);
  10. commit;
  11. end addnewstudent3;


  12. begin
  13.  addnewstudent3('0211','高五','男',21,'cs');
  14. end;

返回error:
ORA-06550: 第 2 行, 第 17 列:
PLS-00363: 表达式 '0211' 不能用作赋值目标
ORA-06550: 第 2 行, 第 24 列:
PLS-00363: 表达式 '高五' 不能用作赋值目标
ORA-06550: 第 2 行, 第 33 列:
PLS-00363: 表达式 '男' 不能用作赋值目标
ORA-06550: 第 2 行, 第 39 列:
PLS-00363: 表达式 '21' 不能用作赋值目标
ORA-06550: 第 2 行, 第 42 列:
PLS-00363: 表达式 'cs' 不能用作赋值目标
ORA-06550: 第 2 行, 第 2 列:
PL/SQL: Statement ignored


如果换成传出参数IN OUT,会怎么样了?

  1. create or replace procedure addnewstudent5(
  2. p_sno in out student.sno%type,
  3. p_sname in out student.sname%type,
  4. p_ssex in out student.ssex%type,
  5. p_sage in out student.sage%type,
  6. p_sdept in out student.sdept%type)
  7. As
  8. begin
  9. insert into student values(p_sno, p_sname, p_ssex, p_sage, p_sdept);
  10. commit;
  11. end addnewstudent5;


  12. begin
  13.  addnewstudent5(\'0211\',\'高五\',\'男\',21,\'cs\');
  14. end;

报错误:
第 2 行出现错误:
ORA-06550: 第 2 行, 第 17 列:
PLS-00363: 表达式 '0211' 不能用作赋值目标
ORA-06550: 第 2 行, 第 24 列:
PLS-00363: 表达式 '高五' 不能用作赋值目标
ORA-06550: 第 2 行, 第 33 列:
PLS-00363: 表达式 '男' 不能用作赋值目标
ORA-06550: 第 2 行, 第 39 列:
PLS-00363: 表达式 '21' 不能用作赋值目标
ORA-06550: 第 2 行, 第 42 列:
PLS-00363: 表达式 'cs' 不能用作赋值目标
ORA-06550: 第 2 行, 第 2 列:
PL/SQL: Statement ignored





来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/26435490/viewspace-1077840/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2014-01-18

  • 博文量
    143
  • 访问量
    492021