Oracle 存储过程笔记

写Oracle存储过程习惯用PL/Sql dev,里面有一些模版,我这里也记录一些目前经常使用的一些:
--基本例子
create or replace procedure TestProc as
begin
  for c in (select fieldName from tableName)
  loop
      dbms_output.put_line(c.fieldName);
  end loop;
endTestProc  ;

--带异常处理
create or replace procedure test2 as
--局部变量
  vc varchar2(2048);
begin
  --过程体卸载这里
Raise cust_exception;
  -- 异常处理  
EXCEPTION
  when cust_exception then
       dbms_output.put_line('custom exception');
  WHEN OTHERS THEN
    --回滚
    ROLLBACK;
    dbms_output.put_line('Other Errors');
    RETURN;
    --END;
end test2;

--匿名过程,常用于临时处理数据
DECLARE
--局部变量
l_elem MDSYS.SDO_ELEM_INFO_ARRAY;
l_ord MDSYS.SDO_ORDINATE_ARRAY;
l_srid NUMBER := 262148; -- Arbritrary X-Y Meters
l_gtype NUMBER := 2002; -- 2d Line
j NUMBER;
x NUMBER;
y NUMBER;
BEGIN

l_elem := MDSYS.SDO_ELEM_INFO_ARRAY();
l_ord := MDSYS.SDO_ORDINATE_ARRAY();
l_elem.EXTEND(3);
l_elem(1) := 1;
l_elem(2) := 2; -- etype line
l_elem(3) := 1; -- interpretation straight segments
--for循环
for j in 1 .. 1500 LOOP
x := j;
y := mod(j, 2);
l_ord.EXTEND(2);
l_ord(l_ord.LAST - 1) := x;
l_ord(l_ord.LAST) := y;
END LOOP;
INSERT INTO SHAPELY (entid, coordinates)
values ('BINDVAR', MDSYS.SDO_GEOMETRY(l_gtype, l_srid, NULL,l_elem, l_ord) );
end;

--动态游标,带参数,返回值
create or replace function TestProc(v in varchar2) return varchar2 is
  strSql varchar2(4056);--SQL语句
  type rCursor is ref cursor; --游标类型
  cur rCursor;--定义游标
begin
  --拼装语句
  strSql := 'select field1 from tabName where field2 = ' || v;

  open  cur for strSql;
 
   LOOP
     dbms_output.put_line(cur.field1);
   END LOOP;
   CLOSE cur; --关闭游标
  return('OK');
end TestProc;

猜你喜欢

转载自tedeum.iteye.com/blog/1497536