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;
    

      

  • 相关阅读:
    Could A New Linux Base For Tablets/Smartphones Succeed In 2017?
    使用libhybris,glibc和bionic共存时的TLS冲突的问题
    6 Open Source Mobile OS Alternatives To Android in 2018
    Using MultiROM
    GPU drivers are written by the GPU IP vendors and they only provide Android drivers
    Jolla Brings Wayland Atop Android GPU Drivers
    How to Use Libhybris and Android GPU Libraries with Mer (Linux) on the Cubieboard
    闲聊Libhybris
    【ARM-Linux开发】wayland和weston的介绍
    Wayland and X.org problem : Why not following the Android Solution ?
  • 原文地址:https://www.cnblogs.com/wangjianly/p/10773967.html
Copyright © 2011-2022 走看看