文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

Oracle存储过程怎么理解

2023-07-05 08:49

关注

今天小编给大家分享一下Oracle存储过程怎么理解的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。

一、存储过程通俗理解

二、创建存储过程基本语法(汇总)

CREATE OR REPLACE PROCEDURE P_存储过程名(变量名 IN|OUT 数据类型)   -- 存储过程名称通常以P_开头IS-- IS作为申明变量的关键词V_NUM   NUMBER;-- 声明NUMBER类型的变量,后以分号结束V_USERNAME  VARCHAR2(40);-- 声明VARCHAR2类型的变量V_SORTINTEGER;-- 声明Integer类型的变量V_IS_BIND   NUMBER(12);-- 声明长度为12的NUMBER类型变量V_NAME T_USER.NAME%TYPE; -- 声明变量直接赋值(表中NAME类型和长度就是V_NAME的类型和长度)V_USER T_USER%ROWTYPE;-- 声明记录型变量,相当于Java的对象,可以使用点加变量名获取值CURSOR T_USER IS SELECT NAME,AGE FROM T_USER;-- 声明游标-- 此处只作演示所用,其他变量声明可参考博文下面的示例及注释;BEGIN-- 执行代码开始-- 执行的代码逻辑,类似Java的方法体V_USER := '张三';-- 给变量赋值。语法是冒号后面跟等号DBMS_OUTPUT.PUT_LINE(TO_CHAR(SYSDATE, 'YYYYMMDD'));-- 打印语句,相当于Java中的println方法EXCEPTION-- 异常  WHEN OTHERS THEN ...-- OTHERS相当于Java中的Exception,会捕获所有异常END;-- 执行代码结束,以分号结束,也有一些是END后跟储存过程名加分号

三、执行存储过程的方式(5种)

-- 方式一,在SQL>后面执行EXEC 存储过程名(参数..);或EXECUTE 存储过程名(参数..);-- 方式二,在PL/SQL Developer的SQL窗口中执行(下有图)BEGIN存储过程名(参数);-- 执行的存储过程需要加分号END;-- 方式三,在PL/SQL Developer的Test窗口中执行,可执行debug,或者编译(下有图)BEGIN存储过程名(参数);--该种调用方式可调试END;-- 方式四,Java代码调用CallableStatement callableStatement = connection.divpareCall("{call 存储过程名(?)}");-- 方式五,在Mapper中调用,有入参和出参,使用<![CDATA[]]>包裹<![CDATA[{CALL 存储过程名(#{name,mode=IN,jdbcType=VARCHAR},#{age,mode=OUT,jdbcType=INTEGER})}]]>

Oracle存储过程怎么理解

Oracle存储过程怎么理解

四、网上现有的创建存储过程的两种方式解释(看注释)

-- 方式一:该方式类似创建一个Java类,形成一个P_PUSH_MSG.sql的文件,该可以编译后保存在数据库,方便以后执行;CREATE OR REPLACE PROCEDURE P_PUSH_MSG(V_RETCODE OUT VARCHAR2, V_RETINFO OUT VARCHAR2) IS...-- 方式二:该方式类似直接写的main方法,或者sql语句,不是文件,直接复制粘贴到其他地方执行、测试等。概念与上面方式一样;DECLAREV_IS_BIND   NUMBER(12);BEGIN...END;

五、一些存储过程示例(仅供参考)

-- 示例一:数据库造数,不用手动插入了DECLARE  I NUMBER := 0;BEGIN  FOR I IN 1 .. 500 LOOP-- 循环语法,循环500次    INSERT INTO T_USER      (ID, USERID, USERNAME, AGE, CREATE_TIME)    VALUES      (I, 'U_' + I, 'XXYZ' + I, I, SYSDATE);  END LOOP;-- 循环语法结束  COMMIT;-- 事务提交END;
-- 示例二:CREATE OR REPLACE PROCEDURE P_ORDER_LIST(V_IN_DATE NUMBER) ISBEGIN  DECLARE-- CREATE OR REPLACE PROCEDURE里面是可以有DECLARE的    V_IS_BIND   NUMBER(12);    V_IS_WORK NUMBER(12);    V_COUNT_DATE    NUMBER(12);  BEGINV_COUNT_DATE := V_IN_DATE;DELETE FROM T_PUSH_MSG_TEMP WHERE DT = V_COUNT_DATE; --删除临时表表 T_PUSH_MSG_TEMPFOR I IN (SELECT A.ID CPU_ID, A.UCXM, A.ORGID, L.NAME ORGNAME, Y.REGINON_ID, Y.REGINON_NAME FROM JYXX ALEFT JOIN (SELECT LBO.ID   BRANCH_ID,LBO.ID   REGINON_ID,LBO.NAME REGINON_NAME FROM ORGANIZATION N1) Y  ON A.ORGID = Y.BRANCH_IDLEFT JOIN ORGANIZATION L  ON A.ORGID = L.ID) LOOP-- 循环语法为:FOR X IN () LOOP...    -- 插入表  INSERT INTO T_PUSH_MSG_TEMP(DT, CPU_ID, CPU_NAME, IS_BIND, IS_BIND_RATE, REGION_ID, REGION_NAME, BRANCH_ID, BRANCH_NAME)  VALUES(V_COUNT_DATE, I.CPU_ID, I.UCXM, V_IS_BIND, CASE V_IS_WORK WHEN 0 THEN 0 ELSE-- CASE WHEN 用法 ROUND(V_IS_BIND / V_IS_WORK, 2) END,   -- ROUND函数用法 I.REGINON_ID, I.REGINON_NAME, I.ORGID, I.ORGNAME);END LOOP;  END;END;
-- 示例三:CREATE OR REPLACE PROCEDURE P_QYWX_TEXT_SHYJ_MSG() ISV_COUNT          NUMBER; -- 数量BEGIN  SELECT COUNT(*) INTO V_COUNT FROM T_ENTRY_INFO WHERE ENTRY_DT = V_DATE;-- 赋值用法,INTO关键字到变量V_COUNT中IF V_COUNT = 0 THEN                                                         -- IF判断用法-- 业务开始FOR A IN (SELECT CHARGE_NAME FROM T_ENTRY_INFO WHERE DEPT IN ('好好学习部','天天向上部')) LOOP-- 循环用法SELECT SEQ_ENTRY_INFO.Nextval INTO ID FROM DUAL;-- 查询序列INSERT INTO T_PUSH_MSG(ID, BUSINESS_TYPE, RECIVE_MOBILE, RECIVE_NAME, TITLE, CONTENT, CONTENT_ORDER, STATUS, CREATE_DATE, UPDATE_DATE)VALUES(ID,'DX',(SELECT MOBILE FROM T_EXT_USER WHERE NAME = A.CHARGE_NAME),A.CHARGE_NAME,'PLSQL','存储过程示例',ID,'无',SYSDATE,NULL);END LOOP;ELSIF V_COUNT <10 THEN-- 判断语句,类似Java的else if。 注意:这里是ELSIF,少个字母EDBMS_OUTPUT.PUT_LINE('T_ENTRY_INFO表记录数少于' || V_COUNT || '条。'); -- 拼接语法,使用双竖线拼接,相当于Java的加号ELSE-- 判断语句,相当于Java的elseDBMS_OUTPUT.PUT_LINE('T_ENTRY_INFO表记录数大于' || V_COUNT || '条。');END IF;EXCEPTION-- 异常捕获语句  WHEN OTHERS THEN-- OTHERS关键字,相当于Java中的ExceptionDBMS_OUTPUT.PUT_LINE(SQLERRM)-- 异常原因:使用SQLERRM关键词相当于Java代码中的堆栈信息END;

六、其他语法

DROP PROCEDURE 存储过程名;-- 删除存储过程名SET SERVEROUTPUT ON;-- 若是没有执行输出语句,可以使用该命令

以上就是“Oracle存储过程怎么理解”这篇文章的所有内容,感谢各位的阅读!相信大家阅读完这篇文章都有很大的收获,小编每天都会为大家更新不同的知识,如果还想学习更多的知识,请关注编程网行业资讯频道。

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯