zoukankan      html  css  js  c++  java
  • Oracle PL/SQL,游标,过程

    1、PL/SQL  语法相关

    -- SQL 语言只是访问,操作数据库的语言,而比并不是程序设计语言,因此不能用于程序开发。
    -- PL/SQL 是在标准SQl语言上进行过程性扩展后形成的程序设计语言,是一种Oracle数据库特有的,支持应用开发语言;
    ------------if--------------
    DECLARE
       address  VARCHAR2(10) :='Y1';
    BEGIN 
       IF (address ='Y') THEN
         dbms_output.put_line('yes');  
       ELSE
         dbms_output.put_line('no');
        END IF;
    END;
     
    -------------case------------
    DECLARE
      ADDRESS NUMBER := 1;
    BEGIN
      CASE ADDRESS
        WHEN 1 THEN
          DBMS_OUTPUT.PUT_LINE('1');
        WHEN 2 THEN
          DBMS_OUTPUT.PUT_LINE('2');
        WHEN 3 THEN
          DBMS_OUTPUT.PUT_LINE('3');
        ELSE
          DBMS_OUTPUT.PUT_LINE('4');
      END CASE;
    END;
    ------------LOOP-------------
    DECLARE
      NUM NUMBER := 5;
    BEGIN
      LOOP
        IF NUM < 0 THEN
          EXIT;
        END IF;
         dbms_output.put_line('H:'||NUM);
        NUM := NUM - 1;
      END LOOP;
    END;
    ----------
    DECLARE
      NUM NUMBER := 5;
    BEGIN
      LOOP
        EXIT WHEN NUM < 0;
        DBMS_OUTPUT.PUT_LINE('k:' || NUM);
        NUM := NUM - 1;
      END LOOP;
    END;
    ------FOR...IN..LOOP...END-------
    BEGIN
      FOR i IN 1..10 LOOP
        DBMS_OUTPUT.PUT_LINE('L:' || i);
        END LOOP;
    END;
    --------------------------
    --%TYPE 定义一个变量,将数据类型与已经定义的数据变量的类型相同,
    --或与数据库表的某列的数据类型相同
    select * FROM chengji;
    DECLARE
      NAME1  CHENGJI.NAME%TYPE;
      SCORE1 CHENGJI.SCORE%TYPE;
    BEGIN
      SELECT NAME, SCORE INTO NAME1, SCORE1 FROM CHENGJI WHERE ID = 4;
      DBMS_OUTPUT.PUT_LINE(NAME1 || '-' || SCORE1);
    END;
    
    --提供%ROWTYPE操作符, 返回一个记录类型, 其数据类型和数据库表的数据结构相一致
    DECLARE
      CJ CHENGJI%ROWTYPE;
    BEGIN
      SELECT * INTO CJ FROM CHENGJI WHERE ID = 4;
      DBMS_OUTPUT.PUT_LINE(CJ.NAME || '-' || CJ.SCORE);
    END;

    2、游标使用

      1.声明游标

      2.打开游标

      3.提取游标

      4.关闭游标

    游标属性
    %NOTFOUND -- 是否没找打游标
    %FOUND -- 是否找到游标
    %ROWCOUNT -- 游标行数
    %ISOPEN -- 游标是否打开

    -- for 循环游标
    DECLARE
      CURSOR CJ IS
        SELECT * FROM CHENGJI;
        -- 定义一个游标变量cj_row ,类型为cj的一行类型
      CJ_ROW CJ%ROWTYPE;
    BEGIN
      FOR CJ_ROW IN CJ LOOP
        DBMS_OUTPUT.PUT_LINE(CJ_ROW.NAME || '-' || CJ_ROW.COURSE || '-' ||
                             CJ_ROW.SCORE);
      END LOOP;
    END;
    
    -- Fetch 游标
    DECLARE
      CURSOR CJ IS
        SELECT NAME, COURSE, SCORE FROM CHENGJI;
      CJ_ROW CJ%ROWTYPE;
    
    BEGIN
      OPEN CJ;
      LOOP
        FETCH CJ
          INTO CJ_ROW;
        EXIT WHEN CJ%NOTFOUND;-- 判断是否取到值,没取到值就退出
        DBMS_OUTPUT.PUT_LINE(CJ_ROW.NAME || ',' || CJ_ROW.COURSE || ',' ||
                             CJ_ROW.SCORE);
      END LOOP;
      CLOSE CJ;
    END;

    3、过程

    3.1

    -- 创建过程
    CREATE OR REPLACE PROCEDURE 存储过程名(参数in,参数out)
    AS
    -- 变量声明
    NAME VARCHAR2(10);
    age  INTEGER ;
    BEGIN
      --业务逻辑
    END;
    

    3.2

    CREATE OR REPLACE PROCEDURE PRO_CHENGJI_ID(NAME1 IN chengji.name%TYPE, ID1   IN chengji.id%TYPE) 
    AS
    BEGIN
      UPDATE CHENGJI SET ID = ID1 WHERE NAME = NAME1;
      COMMIT;
    END ;
    --执行过程
    call  PRO_CHENGJI_ID('王五',4); 

    3.3

    CREATE OR REPLACE PROCEDURE PRO_CHENGJI_ID(NAME1   IN CHENGJI.NAME%TYPE,
                                               ID1     IN CHENGJI.ID%TYPE,
                                               COURSE1 IN CHENGJI.COURSE%TYPE,
                                               SCORE1  OUT CHENGJI.SCORE%TYPE) AS
    BEGIN
      SELECT SCORE
        INTO SCORE1
        FROM CHENGJI
       WHERE NAME = NAME1
         AND ID = ID1
         AND COURSE = COURSE1;
    END PRO_CHENGJI_ID;
    --执行过程
    DECLARE
     score chengji.score%TYPE;
    BEGIN 
       PRO_CHENGJI_ID('王五',3,'化学',SCORE); 
       dbms_output.put_line(''||score);
    END;
    

      

  • 相关阅读:
    微信小程序---自定义三级联动
    jQuery分页插件
    微信小程序点击图片放大
    微信小程序----日期时间选择器(自定义精确到分秒或时段)
    PHP文件上传error的错误类型
    获取url传的参数转变为对象的方法
    mysql忘记密码时,重新修改密码
    表单注册及自定义validate手机验证码验证实例
    登陆jq表单验证及jqcookie记住密码实例
    iframe高度自适应,自适应子页面高度
  • 原文地址:https://www.cnblogs.com/wangjianly/p/10773967.html
Copyright © 2011-2022 走看看