欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Oracle 存储过程笔记 博客分类: 数据库 Oracle存储过程动态游标 

程序员文章站 2024-03-08 12:44:22
...

 

写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;