• 第一天写博客,分享下学习oracle存储过程的过程


    新建一个简单的存储过程

    create or replace PROCEDURE firstPro
    IS
    BEGIN
    dbms_output.put_line('执行了'); 控制台输出     
    END;

    NaviCat运行没问题;

    用过程查询表;

    create or replace PROCEDURE firstPro
        IS
        BEGIN
          UPDATE DM_DT_DATA_OBJECT t SET t."NAME" = '新建参数1' WHERE t."ID" ='4028810c67befbbe0167bf2140d10002';            
        END;

    调用过程;

    BEGIN
        FirstPro () ;
    END ;

    查询下sql执行用时;

     CREATE OR REPLACE procedure testtime  
        is  --定义过程变量  
                    n_start   number;  
                    n_end   number; 
                    samplenum number;
                    use_time number;
        begin  
                     n_start:=dbms_utility.get_time;  
                     select count(*) into samplenum from DM_DT_DATA_OBJECT; 
                     n_end:=dbms_utility.get_time;  
                     use_time:=   n_end   -   n_start;  
                     dbms_output.put_line('查询'||samplenum||'条,用时'|| use_time ||'毫秒');  
        end;

    带参数的过程实例

    CREATE OR replace PROCEDURE test_fl(num IN NUMBER,bub IN NUMBER)
    IS
        n NUMBER;
        b NUMBER;
    BEGIN 
        n := num;
        b := bub;
        dbms_output.put_line('输出参数'||n||b);
    END;

    调用(注意的一点是调用是传参类型和过程的参数类型不一致竟然也可以)

    DECLARE 
    c VARCHAR(5);
    b VARCHAR(6);
    BEGIN
        c := '888';
        b := '666';
        test_fl('888','666'); --'=>'指定参数,还可以写成test_fl(c,b)/('888','666')
    END;
    --控制台 输出参数888666

     循环插入并打印插入条数

    CREATE OR replace PROCEDURE inserttest_wfl
    AS
    str NUMBER;
    endc NUMBER;
    out NUMBER; 
    cursor dm_db IS SELECT id,name from DM_DT_DATA_OBJECT;
    BEGIN
        SELECT COUNT(*) INTO str from TEST_USER_WFL;
    FOR tamp IN dm_db loop
        INSERT INTO TEST_USER_WFL("ID","NAME",SEX) VALUES(tamp.id,tamp.name,'1'); 
    END loop; SELECT COUNT(*) INTO endc from TEST_USER_WFL; out := endc - str; dbms_output.put_line(out+1); END;

     过程中if判断的应用

    CREATE OR replace PROCEDURE iftest_fl(cid in VARCHAR,rname out VARCHAR)
    AS
                aid VARCHAR(20);
    BEGIN 
                aid :=cid;
        IF (aid ='1') THEN
                select name into rname from test_user_wfl where id=aid;
        ELSE
                dbms_output.put_line('123');
          end IF; END;--注意navicat 编辑器 end if;要和 END;写在一行否则会报编译错误ORA-24344 其他工具不详
    
    
    --调用
    DECLARE
    a VARCHAR(20);
    b VARCHAR(20);
    
    BEGIN
    a :='1';
    iftest_fl(cid=>a,rname=>b);
    dbms_output.put_line(b);--获取输出参数就是过程返回结果;
    END;

     利用游标过程返回结果集【】

    CREATE or replace PROCEDURE out_result_test_wfl(result out sys_refcursor)--定义输出游标类型
    
    IS
    BEGIN 
    open result for SELECT id,name,sex from test_user_wfl;--游标返回结果集
    end;
    
    --调用
    
    DECLARE 
    t sys_refcursor;                --定义游标
    s test_user_wfl%rowtype;--定义数据行类型test_user_wfl=tableName
    f NUMBER;
    begin
    out_result_test_wfl(t);
        loop
    FETCH
        t into s.id,s.name,s.sex;
        dbms_output.put_line(s.id||s.name||'  '||s.sex);
        exit WHEN t%notfound;--迭代完退出 when 后为退出条件 找不到下一条记录时;
        end loop; 
    close t; --关闭游标 不关闭会造成死循环 FOR loop 属于隐士游标;
    end;
  • 相关阅读:
    windows 创建指定大小文件
    python pip命令 报错‘unknow or unsupported command install’
    PyCharm:ModuleNotFoundError: No module named 'selenium'
    毕设图片链接
    本地localhost:端口号(自己设置的Apache的端口号)打不开问题解决了!开心、哭泣
    python之freshman00
    Python之freshman07 面向对象编程jinjie
    Python之freshman08 Socket
    Python之freshman04
    Python之freshman05
  • 原文地址:https://www.cnblogs.com/wangfl/p/10244101.html
Copyright © 2020-2023  润新知