美文网首页
PLSQL(一)

PLSQL(一)

作者: 大炮对着虫子 | 来源:发表于2017-09-27 09:31 被阅读11次

    PL/SQL是一种块结构的语言,这意味着PL/SQL程序被划分和编写代码的逻辑块。每块由三个子部分组成:

    1   声明 
    此部分开头使用关键字DECLARE。它是一个可选的部分,
    并限定在该程序中使用的所有变量,游标,子程序,和其他元素。
    2   可执行命令
    此部分是封闭关键字BEGIN和END,这是一个强制性的部分。
    它由程序的可执行文件的PL/SQL语句。
    它应具有至少一个可执行的代码行,这可能仅仅是一个空命令,以指示什么都不执行。
    3   异常处理
    此部分开头使用关键字EXCEPTION。此部分又是可选的,含有异常,
    在程序处理错误中。
    

    例子:

    DECLARE
       message  varchar2(20):= 'Hello, World!';
    BEGIN
       dbms_output.put_line(message);
    END;
    

    关于变量的简单例子

    DECLARE
       a integer := 10;
       b integer := 20;
       c integer;
       f real;
    BEGIN
       c := a + b;
       dbms_output.put_line('Value of c: ' || c);
       f := 70.0/3.0;
       dbms_output.put_line('Value of f: ' || f);
    END;
    
    结果:
    Value of c: 30
    Value of f: 23.333333333333333333
    
    指定sql查询结果为pl/sql变量
    创建表
    CREATE TABLE CUSTOMERS(
       ID   INT NOT NULL,
       NAME VARCHAR (20) NOT NULL,
       AGE INT NOT NULL,
       ADDRESS CHAR (25),
       SALARY   DECIMAL (18, 2),       
       PRIMARY KEY (ID)
    );
    
    插入数据
    INSERT INTO CUSTOMERS (ID,NAME,AGE,ADDRESS,SALARY)
    VALUES (1, 'Ramesh', 32, 'Ahmedabad', 2000.00 );
    
    INSERT INTO CUSTOMERS (ID,NAME,AGE,ADDRESS,SALARY)
    VALUES (2, 'Khilan', 25, 'Delhi', 1500.00 );
    
    INSERT INTO CUSTOMERS (ID,NAME,AGE,ADDRESS,SALARY)
    VALUES (3, 'kaushik', 23, 'Kota', 2000.00 );
    
    INSERT INTO CUSTOMERS (ID,NAME,AGE,ADDRESS,SALARY)
    VALUES (4, 'Chaitali', 25, 'Mumbai', 6500.00 );
    
    INSERT INTO CUSTOMERS (ID,NAME,AGE,ADDRESS,SALARY)
    VALUES (5, 'Hardik', 27, 'Bhopal', 8500.00 );
    
    INSERT INTO CUSTOMERS (ID,NAME,AGE,ADDRESS,SALARY)
    VALUES (6, 'Komal', 22, 'MP', 4500.00 );
    
    
    
    关键的来了
    DECLARE
       c_id customers.id%type := 1;
       c_name  customers.name%type;
       c_addr customers.address%type;
       c_sal  customers.salary%type;
    BEGIN
       SELECT name, address, salary INTO c_name, c_addr, c_sal
       FROM customers
       WHERE id = c_id;
    
       dbms_output.put_line
       ('Customer ' ||c_name || ' from ' || c_addr || ' earns ' || c_sal);
    END;
    
    IF Then 语句
    
    
    DECLARE 
    c_id customers.id%type := 1; 
    c_sal customers.salary%type;
    BEGIN 
    SELECT salary INTO c_sal FROM customers WHERE id = c_id; 
    IF (c_sal <= 2000) 
    THEN UPDATE customers SET salary = salary + 1000 WHERE id = c_id; 
    dbms_output.put_line ('Salary updated'); END IF;
    END;
    
    CASE语句

    方式一

    DECLARE
       grade char(1) := 'A';
    BEGIN
       CASE grade
          when 'A' then dbms_output.put_line('Excellent');
          when 'B' then dbms_output.put_line('Very good');
          when 'C' then dbms_output.put_line('Well done');
          when 'D' then dbms_output.put_line('You passed');
          when 'F' then dbms_output.put_line('Better try again');
          else dbms_output.put_line('No such grade');
       END CASE;
    END;
    

    方式二

    ECLARE
       grade char(1) := 'B';
    BEGIN
       case 
          when grade = 'A' then dbms_output.put_line('Excellent');
          when grade = 'B' then dbms_output.put_line('Very good');
          when grade = 'C' then dbms_output.put_line('Well done');
          when grade = 'D' then dbms_output.put_line('You passed');
          when grade = 'F' then dbms_output.put_line('Better try again');
          else dbms_output.put_line('No such grade');
       end case;
    END;
    
    循环

    loop循环

    DECLARE
       x number := 10;
    BEGIN
       LOOP
          dbms_output.put_line(x);
          x := x + 10;
          IF x > 50 THEN
             exit;
          END IF;
       END LOOP;
       -- after exit, control resumes here
       dbms_output.put_line('After Exit x is: ' || x);
    END;
    

    while 循环

    DECLARE
       a number(2) := 10;
    BEGIN
       WHILE a < 20 LOOP
          dbms_output.put_line('value of a: ' || a);
          a := a + 1;
       END LOOP;
    END;
    

    for循环

    DECLARE
       a number(2);
    BEGIN
       FOR a in 10 .. 20 LOOP
           dbms_output.put_line('value of a: ' || a);
      END LOOP;
    END;
    
    
    value of a: 10
    value of a: 11
    value of a: 12
    value of a: 13
    value of a: 14
    value of a: 15
    value of a: 16
    value of a: 17
    value of a: 18
    value of a: 19
    value of a: 20
    

    反转for循环

    DECLARE
       a number(2) ;
    BEGIN
       FOR a IN REVERSE 10 .. 20 LOOP
          dbms_output.put_line('value of a: ' || a);
       END LOOP;
    END;
    
    
    
    value of a: 20
    value of a: 19
    value of a: 18
    value of a: 17
    value of a: 16
    value of a: 15
    value of a: 14
    value of a: 13
    value of a: 12
    value of a: 11
    value of a: 10
    
    

    相关文章

      网友评论

          本文标题:PLSQL(一)

          本文链接:https://www.haomeiwen.com/subject/gwerextx.html