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
--过程体卸载这里
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;
-- 异常处理
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
DECLARE
--局部变量l_elem MDSYS.SDO_ELEM_INFO_ARRAY;l_ord MDSYS.SDO_ORDINATE_ARRAY;l_srid NUMBER := 262148; -- Arbritrary X-Y Metersl_gtype NUMBER := 2002; -- 2d Linej 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 linel_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;
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;
推荐阅读
-
Oracle 存储过程笔记 博客分类: 数据库 Oracle存储过程动态游标
-
ORACLE日期时间函数大全 博客分类: 存储过程oracle OracleSQLJSPD语言SUN
-
Oracle存储过程开发 博客分类: SQL技术栈 Oracle数据库存储过程Job定时任务
-
oracle数据库存储过程,带commit,rollback OracleSQL
-
oracle数据库存储过程,带commit,rollback OracleSQL
-
存储过程、定时任务调用过程 博客分类: oracle
-
Oracle数据库编译存储过程假死问题
-
只把Oracle的存储过程或者函数全部迁移到其他的数据库中
-
oracle 分页存储过程 博客分类: Oracle小记 oracle存储过程分页
-
MYSQL存储过程游标错误:No data - zero rows fetched, selected, or processed 博客分类: DB-mysql mysqlproducurecursor