oracle sql存储过程procedure

简单记录一下oracle sql中存储过程写法。 1.无参数的简单procedure:

create or replace procedure PRO_TEST_DELETE  is
begin

  DELETE FROM Test T WHERE T.TESTNO = 123;
  commit;

end;

2.有输入参数的存储过程

create or replace procedure PRO_INPUT_TEST(testId in varchar2) is
begin
  delete  FROM Test T where t.testno = testId;

end;

如果要写select语句需要将查询结果赋给变量,没有into时会有编译错误

create or replace procedure PRO_INPUT_TEST(testId in varchar2) is
  r_no varchar2(100);
begin

  select t.testno into r_no FROM Test T where t.testno = testId;

end;

3.有输出参数的存储过程

create or replace procedure PRO_OUTPUT_TEST(testId in varchar2,testVer out varchar2) is
begin

  select t.testver into testVer FROM Test T where t.testno = testId;

end;

4.存储过程循环输出查询结果

create or replace procedure PRO_OUTPUT_LOOP(testId in varchar2) is
begin
  for testData in
  (select * FROM Test T where t.testno like %||testId||%) loop
   dbms_output.put_line(testData.testno);
   end loop;
end;

5.存储过程输出拼接的结果

create or replace procedure PRO_OUTPUT_LOOP(testId in varchar2) is
begin
  for testData in
  (select * FROM Test T where t.testno like %||testId||%) loop
   dbms_output.put_line(ID= ||testData.testno);
   end loop;
end;

6.存储过程根据查询结果输出不同结果

create or replace procedure PRO_OUTPUT_LOOP(testId in varchar2) is
begin
  for testData in (select *
                     FROM Test T
                    where t.testno like % || testId || %) loop
    if testData.Testver = 1 then
      dbms_output.put_line(ID= || testData.testno);
    else
      dbms_output.put_line(Ver= || testData.testno);
    end if;
  end loop;
end;

7.存储过程指定输出结果赋值

create or replace procedure PRO_OUTPUT_LOOP(testId in varchar2,
                                            new_ID out varchar2,
                                            old_ID out varchar2) is
begin
  for testData in (select *
                     FROM Test T
                    where t.testno like % || testId || %
                    and rownum <= 2
                    order by t.testno) loop
    if testData.Testver = 1 then
      new_ID := (ID= || testData.testno);
    else
      old_ID := (ID= || testData.testno);
    end if;
  end loop;
end;

8.调用存储过程 1.使用begin end调用

declare
  test_ID varchar2(20);
  new_ID varchar2(20);
  old_ID varchar2(20);

begin
   test_ID:=1; -- 为输入参数赋值
  -- Call the procedure
  PRO_OUTPUT_LOOP(test_ID, new_ID,old_ID);
  dbms_output.put_line(new_ID);
  dbms_output.put_line(old_ID);
end;

2.也可以在plsql等软件中直接右键编辑测试。

经验分享 程序员 微信小程序 职场和发展