oracle存储过程详解
最近做多了存储过程,准备写一些简单的知识点例子,供初学者快速上手
1.存储过程模板
create or replace package body Testpackage is //开始包PROCEDURE TestProcedures(p_parameter IN VARCHAR, p_out_result OUT VARCHAR) AS //开始存储过程v_exe_start_datetime DATE := SYSDATE; BEGINv_exe_end_datetime := SYSDATE;//記錄執行INSERT INTO 表 (字段1,字段2) VALUES (值1,值2);p_out_result := 'S-OK';//给结果赋值退出EXCEPTION //异常抛出WHEN OTHERS THENp_out_result := 'X-' || DBMS_UTILITY.format_error_stack ||DBMS_UTILITY.FORMAT_ERROR_BACKTRACE;END; //结束存储过程end Testpackage;//结束包名
2.存储过程的判断写法
if instr(dataStr, '.1') > 0 then elsif instr(dataStr, '.') = 0 then else
end if;//判读是否为空if v_verder_lot is null thenend if;
3.存储过程赋值的使用
V_aa NUMBER;V_aa :=0;v_now DATE;v_now := sysdate;ValueStr varchar2(50 byte);ValueStr :='aa';//设置一行数据是数据表的类型v_re_exe_row 表aaa%ROWTYPE; //ROWTYPE意思這個值是表aaa是一行数据SELECT *INTO v_re_exe_rowFROM aaa ;whatnever 表名.字段%type; //type意思是一个字段
4.简单的表操作
//从一个表直接把数据插入另外一个表INSERT INTO 表ccc(字段1,字段2,字段3)SELECT 值1, 值2, 值3FROM 表//清除表EXECUTE IMMEDIATE ('TRUNCATE TABLE 表ccc');//插入表INSERT INTO 表ccc(字段1,字段2,字段3)values(值1,值2,值3);//查詢數據循環 SELECT 字段1INTO 定義的變量FROM 表cccwhere rownum =1;
2.游标的使用 (使用游标循环)
游标由程序员明确声明和控制,可以逐行处理查询结果集
下面是使用一个游标的方法
//游標循環//游标查詢数据并赋值给游标//創建一個叫QUERY_TEST_DATA_CUR的游標CURSOR QUERY_TEST_DATA_CUR IS(SELECT 字段1, 字段2 from 表);TYPE xData_test IS TABLE OF QUERY_TEST_DATA_CUR%ROWTYPE INDEX BY PLS_INTEGER; //PLS_INTEGER是一个整数类型l_xData_test xData_test;BEGIN//打开游标OPEN QUERY_TEST_DATA_CUR;LOOPFETCH QUERY_TEST_DATA_CUR BULK COLLECT //将游标指向的值赋给l_xData_testINTO l_xData_test LIMIT 1000; //限制长度FOR indx IN 1 .. l_xData_test.count LOOPNewValue varchar2(50 byte) :=l_xData_test(indx).字段1;//使用方法END LOOP; //跳出循环EXIT WHEN QUERY_TEST_DATA_CUR%NOTFOUND; //当游标不再有值的时候END LOOP; //跳出循环CLOSE QUERY_TEST_DATA_CUR; //跳出游标
