精华内容
下载资源
问答
  • 查阅博文: ...其中描述比较清晰,建议查阅... create or replace procedure 存储过程名(param1 in type,param2 out type) as 变量1 类型(值范围); 变量2 类型(值范围); Begin Select count(*) into 变量1 f

    查阅博文:
    https://www.cnblogs.com/wolfplan/p/4004624.html
    其中描述比较清晰,建议查阅此链接博文

    也可查阅此:https://www.cnblogs.com/ao-xiang/p/6640827.html 其中内容没有附加上,可自行查阅

    oracle 存储过程
    关键字: oracle 存储过程

    存储过程创建语法: 
           create or replace procedure 存储过程名(param1 in type,param2 out type) 
    as 
    变量1 类型(值范围); 
    变量2 类型(值范围); 
    Begin 
        Select count(*) into 变量1 from 表A where列名=param1; 
        If (判断条件) then 
           Select 列名 into 变量2 from 表A where列名=param1; 
           Dbms_output。Put_line(‘打印信息’); 
        Elsif (判断条件) then 
           Dbms_output。Put_line(‘打印信息’); 
        Else 
           Raise 异常名(NO_DATA_FOUND); 
        End if; 
    Exception 
        When others then 
           Rollback; 
    End; 
    

    注意事项:
    1, 存储过程参数不带取值范围,in表示传入,out表示输出
    2, 变量带取值范围,后面接分号
    3, 在判断语句前最好先用count(*)函数判断是否存在该条操作记录
    4, 用select 。。。into。。。给变量赋值
    5, 在代码中抛异常用 raise+异常名

    展开全文
  • 原理就是写个存储过程,接收参数,先删,然后再插入。 SQL语句如下: CREATE OR REPLACE procedure plantInsert( I_XXXX_ID in VARCHAR, I_ZZZZ_ID in VARCHAR, I_YYYY_TIME in VARCHAR, I_CCCC_TYPE in ...

    这里以Oracle 18c为例

    此处实现的功能是类似与mysql的replace into的功能。

    原理就是写个存储过程,接收参数,先删,然后再插入。

    SQL语句如下:

    CREATE OR REPLACE procedure plantInsert(
      I_XXXX_ID in VARCHAR,
      I_ZZZZ_ID in VARCHAR,
      I_YYYY_TIME in VARCHAR,
      I_CCCC_TYPE in VARCHAR,
      ......
      ......
      I_P96 in NUMBER
    )
    
    IS
    BEGIN
    delete from XXXXXXXX where DATA_TIME=TO_TIMESTAMP(I_YYYY_TIME, 'SYYYY-MM-DD HH24:MI:SS:FF6') and XXXX_ID=I_XXXX_ID and CCCC_TYPE=I_CCCC_TYPE;
    INSERT INTO XXXXXXXX VALUES (略);
    END;

    SQL调用如下:

    call PLANTINSERT(略)

    展开全文
  • CREATE OR REPLACE PROCEDURE PRC_STD_DATA_SYNC IS --声明游标 cursor cur_data_i1 is select * from OV_DS_DIC_METATBL_GROUP where ID not in( select ID from OV_DS_DIC_METATBL_GROUP a join DIC_METATBL_...

    方式一:在声明变量的位置声明游标

    实例:

    CREATE OR REPLACE PROCEDURE PRC_STD_DATA_SYNC
    
     IS
    
    --声明游标
    cursor cur_data_i1 is
    select * from OV_DS_DIC_METATBL_GROUP where ID not in(
    select ID from OV_DS_DIC_METATBL_GROUP a
    join DIC_METATBL_GROUP b on a.ID = b.pid);
    
    
    BEGIN
      
      --循环游标并做insert操作
      FOR cur_tbl_i1 IN cur_data_i1 LOOP
          BEGIN
            insert into DIC_METATBL_GROUP(PID,GROUP_NAME,CREATE_TIME,CREATE_USER,CANCEL_TIME,CANCEL_USER,ISENABLE,ISCHECK,GROUP_TYPE,IMPORT_TYPE,IMPORT_DATE)
            values(cur_tbl_i1.ID,cur_tbl_i1.GROUP_NAME,cur_tbl_i1.CREATE_TIME,cur_tbl_i1.CREATE_USER,cur_tbl_i1.CANCEL_TIME,cur_tbl_i1.CANCEL_USER,cur_tbl_i1.ISENABLE,cur_tbl_i1.ISCHECK,cur_tbl_i1.GROUP_TYPE,'I',sysdate);
          END;
      END LOOP;
      
      COMMIT;
    
    END PRC_STD_DATA_SYNC;

     

    方式二:在BEGIN和END语句块内声明游标

    实例:

    create or replace procedure PRC_T_LEASEPACT_CHECK
    
     is
    
    begin
         --声明游标
         declare cursor c_unitID is select FLOORUNIT_ID,ROOM from t_leasepact_hitem_req where LEASEPACT_ID=DATA_ID and (OPERATE_TYPE != 'D' or (OPERATE_TYPE = 'D' and STATUS='9')) ;
         begin
             --循环游标
             for t_name in c_unitID loop
    
                 nullsql:= 'select count(*) nullcount from t_housefloor_unit where OPERATE_TYPE != ''D'' and IS_SELFUSE = 1 and ID ='||t_name.FLOORUNIT_ID;
    
                 execute immediate nullsql into nullcount;
    
                 if nullcount <> '0' then
                   errorcount:=errorcount+1;
                   errorinfo:=errorinfo||'部位/室号为'||t_name.ROOM||'的部位属于自用房产,不能使用!,';
                 end if;
                 
             end loop;
         end;
    
    
    end PRC_T_LEASEPACT_CHECK;
    

     

    展开全文
  •  在存储过程中如何使用事务。当需要在存储过程中同时执行多条添加、修改、删除SQL语句时,为了保证数据完整性,我们需要使用事务。使用方式和在PL-SQL非常相似,但也有一些区别。  --带事务的存储过程 ...

     

    Oracle基础 存储过程和事务

    一、事务和存储过程

      在存储过程中如何使用事务。当需要在存储过程中同时执行多条添加、修改、删除SQL语句时,为了保证数据完整性,我们需要使用事务。使用方式和在PL-SQL中非常相似,但也有一些区别。  

    复制代码

    --带事务的存储过程
    CREATE OR REPLACE PROCEDURE Account_zhuanzhang(fromuser NUMBER,touser NUMBER,money NUMBER) IS
    BEGIN
        UPDATE account SET balance = balance - money WHERE id = fromuser;
        UPDATE account SET balance = balance + money WHERE id = touser;
        COMMIT;
    EXCEPTION
      WHEN OTHERS THEN
        dbms_output.put_line('转账失败');
        ROLLBACK;
    END Account_zhuanzhang;

    复制代码

    调用事务

    复制代码

    SELECT * FROM ACCOUNT;
    DECLARE 
      fromuser NUMBER := 1;
      touser NUMBER := 2;
      money NUMBER := &m;
    BEGIN
      account_zhuanzhang(fromuser,touser,money);
    END;

    复制代码

     

     

    二、自主事务处理:

      自主事务:是由零一个事务启动的独立事务处理。自主事务处理可以暂停主事务处理,也就是处理自己存储过程内部的事务,当自主事务处理完之后会恢复主事务处理。

      PRAGMA AUTONOMOUS_TRANSACTION;  --定义为自主事务,不受其他事务提交,回滚的影响

      例:

    复制代码

    --自主事务:带参数添加部门信息,最后使用了回滚
    CREATE OR REPLACE PROCEDURE PRO_DEPT_ADD(DEPTNO NUMBER,DNAME VARCHAR2,LOC VARCHAR2) AS
    PRAGMA AUTONOMOUS_TRANSACTION;  --定义为自主事务,不受其他事务提交,回滚影响
    BEGIN
      INSERT INTO DEPT (DEPTNO, DNAME, LOC) VALUES (DEPTNO, DNAME, LOC);
        ROLLBACK;  --自主事务回滚操作,不影响主事务。
    END;

    复制代码

    复制代码

    --主事务,添加部门信息,并调用带参数的自主事务,自己本身提交
    CREATE OR REPLACE PROCEDURE PRO_DEPT_ADD2 AS
    BEGIN
      INSERT INTO DEPT (DEPTNO, DNAME, LOC) VALUES (60, 'test1', 'test2');
      PRO_DEPT_ADD(70, 'test', 'test');     --如果调用的事务回滚,如果不是自主事务当前存储过程中插入数据也要一起回滚。但是添加了自主事务后,自主事务提交内容不会影响到当前存储过程
      COMMIT;
    END;

    复制代码

    调用主事务:

    BEGIN
          pro_dept_add2();  --调用完毕后,为60的部门插入成功,但是为70的部门信息回滚了。只有一条插入成功!
    END;

     

      总结自主事务:

      1、自主事务处理结果的变化不依赖于主事务处理的状态或最终配置。

      2、自主事务处理提交或回滚时,不影响主事务处理的结果。

      3、自主事务提交一旦提交,该自主事务处理结果的变化对于其他事务处理就是课件的。这意味着,用于可以访问已更新的信息,无需等待主事务处理提交。

      4、自主事务处理可以启动其它自主事务处理。

     

    分类: Oracle

    标签: oracle

    好文要顶 关注我 收藏该文  

    Builder
    关注 - 17
    粉丝 - 51

    +加关注

    1

    1

    « 上一篇:Oracle基础 存储过程和游标
    » 下一篇:Oracle基础 自定义函数

    https://www.cnblogs.com/zhengcheng/p/4217531.html

     

     

     

     

    存储过程中如何使用事务Transaction

    学习也休闲 学习也休闲 2014-08-16 13:21:54

    一、Begin Trans、Rollback Trans、Commit Trans方法


    1、用于事务处理的方法。BeginTrans用于开始一个事物;RollbackTrans用于回滚事务;CommitTrans用于提交所有的事务处理结果,即确认事务的处理。


    2、事务处理可以将一组操作视为一个整体,只有全部语句都成功执行后,事务处理才算成功;若其中有一个语句执行失败,则整个处理就算失败,并恢复到处里前的状态。



    二、存储过程中使用事务Transaction实例


     Declare @id int
        BEGIN TRANSACTION
       
           Insert into xxxxxTable(f1,f2)values(@a,@b)
           Select @id=@@identity
            Insert into abcTable(ff1,ff2,ff3)values(@c,@id,@dd)

            IF @@error <> 0 --发生错误
            BEGIN
                ROLLBACK TRANSACTION
                RETURN 0
            END
            ELSE
            BEGIN
                COMMIT TRANSACTION
                RETURN 1 --执行成功
           END



    参考资料: 存储过程中使用事务Transaction http://www.studyofnet.com/news/551.html

    存储过程 事务 Transaction

    https://www.douban.com/note/395757588/

     

    展开全文
  • execute immediate在存储过程中使用

    千次阅读 2017-07-18 11:31:52
    execute immediate 在存储过程中使用较为频繁,其作用是巨大的,下面简单介绍其基本用法 1:在存储过程中,我们知道只能使用DML语句,那么如果要使用DDL语句呢,就得使用execute immediate。例如:  ​WANG@...
  • MySQL 存储过程中使用动态SQL语句示例 CREATE PROCEDURE CaluHejije(IN ind int,IN iyf int) BEGIN DECLARE ihv INT; DECLARE sfname varchar(20); declare var_sql varchar(800); DECLARE jeheji decimal(18,...
  • 在Oracle的存储过程中使用dblink调用远程存储过程.
  • 存储过程中使用临时表

    千次阅读 2018-09-02 11:37:06
    要求把各种不同类型的产品价格最低的输入到临时表productinfo——tmp,...该存储过程需要使用游标以及execute immediate语句处理相关问题。 create or replace procedure product_temp_update_prc is pc_...
  • PROCEDURE "Test"--创建Test存储过程 is start_time date;--创建了两个变量,开始时间和结束时间 end_time date; begin start_time := sysdate;--执行开始时间,下面Test1()到Test7()全部都是存储过程,这样调用没...
  • 大家好,本人是一只写存储过程和游标的菜鸟,本篇博客没有什么干货,纯粹是想记录一下自己第一次使用游标的所得。之前只是听说个这两个概念,上周我们老大突然让我尝试着写存储过程和游标来实现一些功能,我花了两天...
  • ORACLE存储过程

    万次阅读 多人点赞 2018-11-02 18:14:48
    oracle存储过程 目录 一.什么是存储过程 二.为什么要写存储过程 三.存储过程基础 1.存储过程结构 2.存储过程语法 3.pl/sql处理存储过程 四.存储过程进阶 1.BUIK COLLECT 2.FORALL 3.pl/sql调试存储过程 ...
  • call SYSPROC.ADMIN_CMD('load from (select * from table1) of cursor replace into table2')
  • 存储过程中使用in参数

    千次阅读 2017-06-22 10:13:28
    昨天遇到了在存储过程中需要传递in(1,3,9,23)这种类型的参数,一开始我是这么写的, decalare @ids varchar(8000) set @ids='1,3,9,23' select * from 表名 where id in (@ids) 但是执行了一下,提示在将值 '1,...
  • 需求是 双11活动结束后根据活动id 给参与的用户发京东E卡券,每个用户无论参与多少次 只发一...create or replace procedure "PRO_SEND_SMS_ECARD" IS no_result exception; -- 定义游标 cursor c_acc is SELECT
  • ORACLE存储过程中sleep的使用

    千次阅读 2020-06-05 11:04:50
    随意创建一个存储过程,例如: create or replace procedure test_sleep is ii positive:=1; begin loop dbms_lock.sleep(1); dbms_output.put_line(ii||' '||to_char(sysdate,'yyyy-mm-dd hh24:mi:ss')); ii:=ii+1;...
  • Oracle存储过程中调用日志存储过程

    千次阅读 2018-03-15 17:04:48
    在写存储过程中一般需要书写过程运行日志,但是工作这么长时间自己从没认真研究过调用日志存储过程的问题。现因项目整合需要做日志监控,才发现日志的重要性:create or replace procedure bo_dw.sp_sys_log ( oi_...
  • --问题描述: 用户在存储过程中调用execute immediate 执行 create table语句报错 ORA-01031, 并且反映直接执行该语句无报错。--原因根据问题可以发现用户确实有create table的权限,查询dba_role_privs 和 dba_...
  • mybaits中使用存储过程

    千次阅读 2014-10-23 10:55:46
    如何使用Mybaits调用数据库存储过程,下面以Oracle数据库的为例:   1.在数据库创建以下的存储过程: create or replace procedure pro_hello(p_result out varchar2) is begin  select * from 表名 ...
  • postgresql 存储过程简单使用

    千次阅读 2018-05-26 10:08:15
    一、存储过程结构: Create or replace function 过程名(参数名 参数类型,…..) returns 返回值类型 as $body$ //声明变量 Declare ...
  • SQL在存储过程中使用临时表

    千次阅读 2019-03-15 09:11:22
    1 CREATE OR REPLACE PROCEDURE PRODUCT_TEMP_UPDATE_PRC AS 2 PC_DELESTR VARCHAR2(50); --删除临时表记录语句 3 PC_CREATESTR VARCHAR2(500); --创建临时表 4 TABEXT VARCHAR2(10); --用于判断临时表是否存在中间...
  • 在navicat工具一般常用的创建存储方式有两种,一种是通过查询创建存储过程,另一种是直接创建函数——存储过程,第二种只是把参数和命名分隔了出来,不用代码实现。当然也可以通过命令行去创建 创建存储过程小...
  • 当时在使用时有点迷惑,多次测试后找到了一些方法,不说了直接上代码: 存储过程: CREATE OR REPLACE FUNCTION select_team(IN _roleuuid character varying, OUT _code integer, OUT _ref refcursor, OUT _member ...
  • 一.Oracle中使用存储过程 1.创建一个存储过程 --创建一个存储过程,插入dept create or replace procedure pro_dept is begin insert into dept values (88, '研发部', '香港'); end; begin pro_dept; end; ...
  • Oracle存储过程中游标的简单使用

    千次阅读 2018-02-06 15:44:16
    初衷: 存储过程中查询语句如何返回多行结果? 我们知道,如果存储过程中查询语句有多行结果输出,会报错: ORA-01422: exact fetch returns ... 本例主要也是用来熟悉存储过程中游标的简单使用方法。案例所涉及
  • 存储过程中传入一个字符串,其表示某主键的ID串,然后我需要分隔开这个字符串,查询语句中使用in来作为查询的条件 语句1是这样的: select t.b, count(1) from t where t.aID in ('''' || REPLACE('3,5,6...
  • 在将db2的存储过程转换为oracle的过程中,涉及到临时会话表,会出现问题: ## 具体描述: 原db2存储过程涉及临时会话表的部分: --创建临时会话表 DECLARE GLOBAL TEMPORARY TABLE COL_NAMES( id integer,...
  • Oracle数据库中使用java实现存储过程

    千次阅读 2016-11-30 14:55:20
    使用命令行实现java存储过程首先使用非DBA账户登陆sqlplus,然后SQL> create or replace and compile java source named "javademo1" 2 as 3 import java.sql.*; 4 public class JavaDemo1 5 { 6 public static...
  • 在Oracle中使用Java存储过程

    千次阅读 2012-08-23 17:14:25
    Java存储过程今后在各大数据库厂商越来越流行,功能也越来越强大。这里以Oracle为例,介绍一下java存储过程的具体用法。 一、如何创建java存储过程? 通常有三种方法来创建java存储过程。 1. 使用oracle...
  • 我的存储过程是这样写的 调用的时候不能调用 是什么原因呢? create or replace procedure test111 as v_sql varchar2(2000); begin v_sql:='create table test222 as select t.id, sum(case when mod(t.amt...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 131,183
精华内容 52,473
关键字:

存储过程中如何使用replace